web-dev-qa-db-fra.com

Comment se connecter à Docker API depuis une autre machine?

J'essaie d'utiliser l'API Docker pour me connecter au démon Docker à partir d'une autre machine. Je peux exécuter cette commande avec succès:

docker -H=tcp://127.0.0.1:4243 images

Mais PAS quand j'utilise la vraie adresse IP:

docker -H=tcp://192.168.2.123:4243 images
2013/08/04 01:35:53 dial tcp 192.168.2.123:4243: connection refused

Pourquoi ne puis-je pas me connecter lorsque j'utilise une adresse IP non locale?

J'utilise un Vagrant VM avec ce qui suit dans Vagrantfile: config.vm.network :private_network, ip: "192.168.2.123"

Ce qui suit est iptables:

# Generated by iptables-save v1.4.12 on Sun Aug  4 01:24:46 2013
*filter
:INPUT ACCEPT [1974:252013]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1511:932565]
-A INPUT -p tcp -m tcp --dport 4243 -j ACCEPT
COMMIT
# Completed on Sun Aug  4 01:24:46 2013
# Generated by iptables-save v1.4.12 on Sun Aug  4 01:24:46 2013
*nat
:PREROUTING ACCEPT [118:8562]
:INPUT ACCEPT [91:6204]
:OUTPUT ACCEPT [102:7211]
:POSTROUTING ACCEPT [102:7211]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.16.42.0/24 ! -d 172.16.42.0/24 -j MASQUERADE
34

Je suis tombé sur un problème similaire, une chose que je ne vois pas mentionnée ici est que vous devez démarrer docker pour écouter à la fois le réseau et une socket Unix. Toutes les commandes de docker (ligne de commande) standard sur l'hôte supposent le socket.

Sudo docker -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -d &

va démarrer docker en écoutant n'importe quelle adresse IP sur votre hôte, ainsi que le socket Unix typique.

61
Andy D

Vous devez écouter 0.0.0.0. Lorsque vous écoutez sur 127.0.0.1, cela signifie que personne en dehors de votre hôte ne pourra se connecter.

11
creack

Veuillez noter que, ce faisant, vous avez donné à quiconque et à toute URL qui vous est envoyée par e-mail un accès à votre API Docker, et donc une autorisation root.

vous devez, au minimum, sécuriser votre socket en utilisant https: http://docs.docker.com/articles/https/

10
SvenDowideit

Il y a 2 façons de configurer le port du démon docker

1) Configuration dans fichier/etc/default/docker:

DOCKER_OPTS="-H tcp://127.0.0.1:5000 -H unix:///var/run/docker.sock"

2) Configuration à / etc/docker/daemon.json:

{
"hosts": ["tcp://<IP-ADDRESS>:<PORT>", "unix:///var/run/docker.sock"]
}

ADRESSE IP - toute adresse accessible peut être utilisée.

Redémarrez le service Docker après avoir configuré le port.

La raison de l'ajout de port utilisateur [tcp: //127.0.0.1: 5000] et socket docker par défaut [unix: ///var/run/docker.sock] = est que le port utilisateur permet l'accès aux API docker tandis que le socket par défaut active la CLI.

1
Here_2_learn