Como faço para expor a API do docker sobre TCP?

9

Estou usando o portainer e não consigo gerenciar endpoints remotos. Eu tentei usar a linha de comando para se conectar a nós de estivadores remotos, mas recebi uma mensagem Cannot connect to the Docker daemon at tcp://<remote_ip>:<port>. Is the docker daemon running? .

Sim, eles estão funcionando. Eu adicionei-me ao grupo docker e posso acessar a janela de encaixe pelo SSHing nos nós. No entanto, não consigo acessar nenhum nó de docker remotamente.

Eu modifiquei /etc/default para adicionar / descomentar DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"

Também modifiquei /etc/init.d/docker e /etc/init/docker.conf para incluir DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock" .

Reiniciei o serviço docker, efetuei logout e login várias vezes no processo, mas ainda não consegui conectar-me ao nó remoto. Eu não posso nem ligar para o nó local, passando o IP.

O que eu perdi? Que configuração em qual arquivo expõe a API sobre TCP?

user@hostname:~$ docker -H tcp://<REMOTE_IP>:2375 info
Cannot connect to the Docker daemon at tcp://<REMOTE_IP>:2375. Is the docker daemon running?
user@hostname:~$ docker -H tcp://127.0.0.1:2375 info
Cannot connect to the Docker daemon at tcp://127.0.0.1:2375. Is the docker daemon running?
user@hostname:~$ docker -H tcp://<LOCAL_IP>:2375 info
Cannot connect to the Docker daemon at tcp://<LOCAL_IP>:2375. Is the docker daemon running?
user@hostname:~$

Editar: A execução de ps aux | grep -i docker retorna isso -

root      3581  0.1  0.2 596800 41540 ?        Ssl  04:17   0:35 /usr/bin/dockerd -H fd://
root      3588  0.0  0.0 653576 14492 ?        Ssl  04:17   0:18 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc
    
por Lord Loh. 07.04.2017 / 18:36

3 respostas

18

Eu encontrei uma solução graças a Ivan Krizsan postar .

Eu tive que editar /lib/systemd/system/docker.service no meu sistema LTS do Ubuntu 16.04.2 para modificar a linha

ExecStart=/usr/bin/docker daemon -H fd:// -H tcp://0.0.0.0:

então

sudo systemctl daemon-reload
sudo systemctl restart docker.service

e tudo funcionou :-). O próximo passo é descobrir como proteger o formulário do daemon do docker sendo sequestrado.

    
por 07.04.2017 / 23:14
1

O diretório / etc / default é onde os mantenedores de distribuição colocam seus arquivos de configuração. Se você instalar o docker diretamente dos repositórios do Docker, esse diretório não será usado.

O diretório / lib / systemd é onde os pacotes instalarão seus arquivos systemd, e eles sobrescreverão quaisquer alterações no upgrade. Se você usar isso, suas alterações serão perdidas.

Para fazer suas próprias alterações em um arquivo de unidade do systemd que persistem, você pode criar um arquivo de unidade em /etc/systemd/system/docker.service.d/, por exemplo, aqui está meu /etc/systemd/system/docker.service.d/override.conf padrão:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd

Essa substituição simplesmente desconfigura todos os sinalizadores de linha de comando para o daemon dockerd a partir do systemd. Uma vez feito isso, você pode sobrescrever todas as configurações do /etc/docker/daemon.json que é usado pelo docker e, dependendo da configuração, pode ser recarregado sem reiniciar o daemon. Por exemplo. aqui está um exemplo de /etc/docker/daemon.json:

{
"debug": false,
"experimental": true,
"hosts": ["fd://", "tcp://0.0.0.0:2376"],
"labels": ["foo=bar", "fez=baz"],
"log-driver": "json-file",
"log-opts": {"max-size": "10m", "max-file": "3"},
"storage-driver": "overlay2",
"tlscacert": "/etc/docker/certs/ca.pem",
"tlscert": "/etc/docker/certs/host-cert.pem",
"tlskey": "/etc/docker/certs/host-key.pem",
"tlsverify": true
}

Para seus objetivos, você só precisa da linha lá para definir os hosts.

Uma parte extremamente importante do arquivo de configuração acima são as configurações de TLS. Se você não configurar o TLS mútuo entre cliente e servidor e abrir a janela de encaixe para ouvir na rede, estará executando o equivalente a um servidor de telnet aberto com logins de raiz permitidos sem uma senha. Se você preferir ssh sobre telnet, ou se preferir ter uma senha para sua conta root, configure o TLS. As portas da API do docker costumam ser verificadas na Internet, e você encontrará malware instalado no host em um curto período de tempo se você pular essa etapa de configuração.

Detalhes completos sobre como configurar as chaves TLS para cliente e servidor podem ser encontrados em: link

    
por 17.08.2018 / 16:32
1

Se você não quiser reconfigurar e reiniciar o daemon do docker, basta conectar o soquete unix a um soquete TCP usando ncat (do pacote nmap ):

ncat -lknvp 2375 -c "ncat -U /var/run/docker.sock"

Como alternativa, você pode usar socat ou outro ferramentas .

    
por 19.10.2018 / 15:47

Tags