it-swarm.com.de

Wie kann ich von einem anderen Computer aus eine Verbindung zur Docker-API herstellen?

Ich versuche, die Docker-API zu verwenden, um von einem anderen Computer aus eine Verbindung zum Docker-Dämon herzustellen. Ich kann diesen Befehl erfolgreich ausführen:

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

Aber NICHT, wenn ich die echte IP-Adresse verwende:

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

Warum kann ich keine Verbindung herstellen, wenn ich eine nicht lokale IP verwende?

Ich verwende einen Vagrant VM mit dem folgenden in Vagrantfile: config.vm.network :private_network, ip: "192.168.2.123"

Folgendes ist 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

Ist auf ein ähnliches Problem gestoßen. Eine Sache, die hier nicht erwähnt wird, ist, dass Sie docker starten müssen, um sowohl das Netzwerk als auch einen Unix-Socket abzuhören. Alle regulären Docker-Befehle (Befehlszeilenbefehle) auf dem Host übernehmen den Socket.

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

docker beginnt mit dem Abhören von IP-Adressen auf Ihrem Host sowie des typischen Unix-Sockets.

61
Andy D

Sie müssen sich 0.0.0.0 anhören. Wenn Sie 127.0.0.1 abhören, bedeutet dies, dass niemand außerhalb Ihres Hosts eine Verbindung herstellen kann.

11
creack

Beachten Sie, dass Sie dabei jedem und jeder per E-Mail an Sie gesendeten URL Zugriff auf Ihre Docker-API und damit auf die Root-Berechtigung gewährt haben.

sie sollten Ihren Socket mindestens mit https: http://docs.docker.com/articles/https/ sichern

10
SvenDowideit

Es gibt 2 Möglichkeiten, den Docker-Daemon-Port zu konfigurieren

1) Konfiguration unter / etc/default/docker file:

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

2) Konfiguration unter / etc/docker/daemon.json:

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

IP-ADRESSE - Es kann jede Adresse verwendet werden, auf die zugegriffen werden kann.

Starten Sie den Docker-Dienst neu, nachdem Sie den Port konfiguriert haben.

Der Grund für das Hinzufügen von Benutzerport [tcp: //127.0.0.1: 5000] und Standard-Docker-Socket [unix: ///var/run/docker.sock] = ist, dass der Benutzerport den Zugriff auf die Docker-APIs ermöglicht, während der Standard-Socket die CLI aktiviert.

1
Here_2_learn