example vagrant iptables docker

vagrant - example - Cómo conectarse a Docker API desde otra máquina?



vagrant docker provider (4)

Hay dos formas de configurar el puerto daemon docker

1) Configuración en el archivo / etc / default / docker :

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

2) Configurando en /etc/docker/daemon.json:

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

DIRECCIÓN IP: se puede usar cualquier dirección a la que se pueda acceder.

Reinicie el servicio de acoplador después de configurar el puerto.

El motivo para agregar tanto el puerto de usuario [tcp: //127.0.0.1: 5000] como el puerto de acoplamiento predeterminado [unix: ///var/run/docker.sock] es que el puerto de usuario habilita el acceso a las API del acoplador, mientras que el socket predeterminado habilita la CLI.

Intento utilizar Docker API para conectarme a Docker Daemon desde otra máquina. Puedo hacer este comando con éxito:

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

Pero NO cuando uso la dirección IP real:

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

¿Por qué no puedo conectarme cuando uso una IP no local?

Estoy usando una máquina virtual Vagrant con lo siguiente en Vagrantfile: config.vm.network :private_network, ip: "192.168.2.123"

El siguiente es 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


Me encontré con un problema similar, una cosa que no veo mencionada aquí es que necesita iniciar Docker para escuchar tanto la red como un socket de Unix. Todos los comandos regulares de docker (línea de comando) en el host asumen el socket.

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

comenzará a Docker a escuchar cualquier dirección IP en su host, así como a la típica conexión Unix.


Necesitas escuchar 0.0.0.0. Cuando escuche en 127.0.0.1, significa que nadie fuera de su host podrá conectarse.


Tenga en cuenta que al hacer esto, le ha dado a cualquier persona, y a cualquier URL que se le envíe por correo electrónico acceso a su API de Docker, y por lo tanto permiso de root.

debe, como mínimo, proteger su socket usando https: http://docs.docker.com/articles/https/