All streams
Search
Write a publication
Pull to refresh

Comments 12

Скажите пожалуйста, как правильно пробросить docker.sock в контейнер angie?

На хосте он как обычно имеет права

ls -l /var/run/docker.sock 
srw-rw----+ 1 root docker 0 Jul 28 14:38 /var/run/docker.sock

В compose добавил

    group_add:
      - 998

В контейнере на вид всё хорошо

id
uid=100(angie) gid=101(angie) groups=82(www-data),101(angie),998

ls -l /var/run/docker.sock 
srw-rw----    1 root     998              0 Jul 28 12:38 /var/run/docker.sock
curl --silent --unix-socket /var/run/docker.sock http://v1.41/version

Выводит json

Но angie ругается на недостаток прав. Такое ощущение, что group_add происходит уже после запуска angie.

Пришлось вот такой костыль городить, но это как-то не красиво

    group_add:
      - 998
    entrypoint: sh -c "
      if ! id -nG angie | grep -qw docker; then
        addgroup -g 998 docker && adduser angie docker;
      fi;
      /usr/sbin/angie -g 'daemon off;'
      "

да и не переносимо, на другом хосте группа docker может иметь другой id

Есть подозрение, что это дочерние (worker) процессы пытаются получить доступ к сокету.

Должны ли они (воркеры) это делать или же "следить за контейнерами" должен основной процесс (запущенный под root пользователем) - вопрос к разработчикам.

По мотивам этого ответа, если сделать ps -ef внутри контейнера и посмотреть на лог под спойлером (формат лога - уровень pid#tid и далее), то ошибку создает именно worker процесс.

Скрытый текст
2025/07/29 17:12:45 [notice] 1#1: creating implicit client block for "@docker_events"

2025/07/29 17:12:45 [notice] 1#1: creating implicit client block for "@docker_containers"

2025/07/29 17:12:45 [notice] 1#1: using the "epoll" event method

2025/07/29 17:12:45 [notice] 1#1: Angie/1.10.1

2025/07/29 17:12:45 [notice] 1#1: built on Thu, 17 Jul 2025 19:23:20 GMT

2025/07/29 17:12:45 [notice] 1#1: OS: Linux 5.15.153.1-microsoft-standard-WSL2

2025/07/29 17:12:45 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576

2025/07/29 17:12:45 [notice] 1#1: start worker processes

2025/07/29 17:12:45 [notice] 1#1: start worker process 7

2025/07/29 17:12:45 [notice] 1#1: start worker process 8

2025/07/29 17:12:45 [notice] 1#1: start worker process 9

2025/07/29 17:12:45 [notice] 1#1: start worker process 10

2025/07/29 17:12:45 [notice] 1#1: start worker process 11

2025/07/29 17:12:45 [notice] 1#1: start worker process 12

2025/07/29 17:12:45 [notice] 1#1: start worker process 13

2025/07/29 17:12:45 [notice] 1#1: start worker process 14

2025/07/29 17:12:45 [notice] 1#1: start worker process 15

2025/07/29 17:12:45 [notice] 1#1: start worker process 16

2025/07/29 17:12:45 [notice] 1#1: start worker process 17

2025/07/29 17:12:45 [notice] 1#1: start worker process 18

2025/07/29 17:12:45 [notice] 1#1: start worker process 19

2025/07/29 17:12:45 [notice] 1#1: start worker process 20

2025/07/29 17:12:45 [notice] 1#1: start worker process 21

2025/07/29 17:12:45 [notice] 1#1: start worker process 22

2025/07/29 17:12:45 [notice] 1#1: start worker process 23

2025/07/29 17:12:45 [notice] 1#1: start worker process 24

2025/07/29 17:12:45 [notice] 1#1: start worker process 25

2025/07/29 17:12:45 [notice] 1#1: start worker process 26

2025/07/29 17:12:45 [notice] 1#1: start worker process 27

2025/07/29 17:12:45 [notice] 1#1: start worker process 28

2025/07/29 17:12:45 [notice] 1#1: start worker process 29

2025/07/29 17:12:45 [notice] 1#1: start worker process 30

2025/07/29 17:12:45 [crit] 7#7: *1 connect() to unix:/var/run/docker.sock failed (13: Permission denied) while connecting to upstream, server: internal_client, upstream: "http://unix:/var/run/docker.sock:/version"

2025/07/29 17:12:45 [error] 7#7: *1 response error (-1) while sending to client, server: internal_client, upstream: "http://unix:/var/run/docker.sock/version"

Всем занимаются рабочие процессы. У мастера только одна функция: обеспечивать отказоустойчивость, т.е. перезагружать конфигурацию без потери соединений и восстанавливать рабочие процессы, если с ними что-то не так. Мастер процесс максимально упрощен и не умеет обслуживать соединения, у него даже полноценного цикла событий нет.

Доступ к сокету соответственно должен быть у пользователя от которого запускаются рабочие процессы.

Убрал всё что выше наколхозил и сделал так systemctl edit docker.socket

[Socket]
ExecStartPost=/usr/bin/setfacl --modify user:100:rw /var/run/docker.sock
systemctl daemon-reload
systemctl restart docker.socket

Надеюсь в будущем ID пользователя angie в контейнере не изменится...

А как в Traefik субдомэйн/домэйн через лэйблы не прикрутить, с вытекающими ACME?

Через labels домен прикрутить сейчас нельзя.

  • контроль перегрузки CUBIC в QUIC‑соединениях;

А разве CUBIC не вмонтирован в ядро системы? Я почему-то был уверен в том, что он в ядре живет, для меня вот прямо сейчас стало неожиданностью, что его отдельно в сервере реализовали почему-то.

действительно встроен:

[werwolf@home] ~  
❯ cat /proc/sys/net/ipv4/tcp_congestion_control             
cubic

но если общесистемно используется другой алгоритм ничто не мешает конкретному приложению наплевать на этот выбор, насколько я понимаю это одно из "преимуществ" quic в целом, каждое приложение может заниматься фигнёй так как оно того хочет.

tcp_congestion_control

Это TCP же. Для UDP по идее должна быть отдельная реализация т.к. TCPшная анализирует ACK сегменты TCP, которых в UDP по определению просто нет.

Вопрос был про CUBIC, а он в ядре для tcp только (либо я отстал от жизни, либо я чего-то не понимаю).

Это я вопрос немного неточно сформулировал. Я пребывал уверенности, что CUBIC уже реализован в ядре специфически для QUIC. В общем у меня вскрылась слепая зона в знаниях, что бывает, т.к. невозможно знать всё.

Протокол QUIC реализован не в ядре.

Sign up to leave a comment.

Articles