3

Я читаю настройки systemd для Docker на CoreOS, пытаясь выяснить, как включается TCP-порт для Docker (порт 2375). Когда я смотрю на файл конфигурации docker.service, у меня складывается впечатление, что Docker прослушивает только дескриптор файла (--host=fd://).

# /usr/lib64/systemd/system/docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.io
Requires=docker.socket
After=docker.socket

[Service]
Environment="TMPDIR=/var/tmp/"
ExecStartPre=/bin/mount --make-rprivate /
Environment=DOCKER_OPTS='--insecure-registry="0.0.0.0/0"'
LimitNOFILE=1048576
LimitNPROC=1048576
# Run docker but don't have docker automatically restart
# containers. This is a job for systemd and unit files.
ExecStart=/usr/bin/docker --daemon --storage-driver=btrfs --host=fd:// $DOCKER_OPTS

[Install]
WantedBy=multi-user.target

Однако, когда я проверяю порты прослушивания через netstat , я вижу следующее:

# sudo netstat -apn

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name 
tcp6       0      0 :::2375                 :::*                    LISTEN      1/systemd        
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
unix  2      [ ACC ]     STREAM     LISTENING     1841     1/systemd            /var/run/docker.sock

Поэтому я покопался немного глубже и нашел файл конфигурации systemd socket для Docker:

# /etc/systemd/system/docker-tcp.socket

[Unit]
Description=Docker Socket for the API

[Socket]
ListenStream=2375
Service=docker.service
BindIPv6Only=both

[Install]
WantedBy=sockets.target

Похоже, это то, что обеспечивает службу прослушивания на порту 2375 (порт Docker по умолчанию), потому что, когда я его останавливаю (используя systemctl stop docker-tcp.socket) и перезапускаю службу Docker (используя systemctl restart docker.service), порт 2375 больше не появляется в netstat .

Итак, мой вопрос заключается в следующем ... действительно ли конфигурация docker-tcp.socket включает локальный интерфейс TCP в качестве опции --host для Docker, или Docker по умолчанию прослушивает локальный интерфейс TCP, когда указано fd:// опция --host , или конфигурация docker-tcp.socket каким-то образом настраивает сопоставление от 0.0.0.0:2375 до /var/run/docker.sock на уровне операционной системы?

1 ответ1

2

Если docker-tcp.socket запущен, systemd будет прослушивать tcp порт 2375. Если он получит соединение, он запустит docker через docker.service и передаст файловый дескриптор этого сокета tcp демону docker. Таким образом, докер будет отвечать только на сокеты tcp и никогда не будет отвечать на запросы на сокете unix /var/run/docker.sock

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .