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?
контроль перегрузки 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 только (либо я отстал от жизни, либо я чего-то не понимаю).
Протокол QUIC реализован не в ядре.
Angie 1.10: разбор фич, планы на 1.11