Como o docker-tcp.socket realmente ativa a API remota do Docker no CoreOS?

3

Estou lendo as configurações do systemd para o Docker no CoreOS tentando descobrir como a porta TCP do Docker (porta 2375) é ativada. Quando vejo o arquivo de configuração docker.service, recebo a impressão de que o Docker está apenas ouvindo em um descritor de arquivo ( --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

No entanto, quando verifico as portas de escuta por meio de netstat , vejo o seguinte:

# 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

Então eu cavei um pouco mais e encontrei um arquivo de configuração do soquete systemd para o 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

Isso parece ser o que fornece o serviço de escuta na porta 2375 (a porta Docker padrão), porque quando eu o paro (usando systemctl stop docker-tcp.socket ) e reinicio o serviço Docker (usando systemctl restart docker.service ), a porta 2375 não é mais mostrada em netstat .

Então, a minha pergunta é esta: o docker-tcp.socket config realmente habilita a interface TCP local como --host para o Docker, ou o Docker por padrão escuta na interface TCP local quando fd:// é especificado? aa --host opção, ou o docker-tcp.socket config de alguma forma está configurando um mapeamento de 0.0.0.0:2375 para /var/run/docker.sock no nível do SO?

    
por Bryan 05.01.2015 / 16:05

1 resposta

2

Se o docker-tcp.socket for iniciado, o systemd escutará na porta tcp 2375. Se ele receber uma conexão, ele iniciará a docker via docker.service e passará o descritor de arquivo desse soquete tcp para o daemon do docker. Desta forma, a janela de encaixe só responderá a soquetes tcp e nunca a solicitações no soquete unix /var/run/docker.sock

    
por 24.02.2015 / 10:32