从docker cintainer内部连接到docker守护进程

我试图configurationdocker守护进程,所以我可以连接到docker集装箱内我开始..

所以我改变了/etc/docker/daemon.json

{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] } 

所以,我通过docker桥连接到它..但是,当我重新启动docker我得到

 netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 3728/mysqld tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 24253/redis-server tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3756/nginx tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3634/sshd tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 3756/nginx tcp6 0 0 :::8010 :::* LISTEN 4230/apache2 tcp6 0 0 :::9200 :::* LISTEN 26824/java tcp6 0 0 :::9300 :::* LISTEN 26824/java tcp6 0 0 :::22 :::* LISTEN 3634/sshd tcp6 0 0 :::2375 :::* LISTEN 1955/dockerd 

所以首先,我虽然问题是这样的事实,它是监听ipv6而不是ipv4。 并根据使docker使用IPv4的端口绑定它应该都仍然工作,但它没有..当我尝试

 telnet 172.17.0.1(docker host) 2375 

它无法连接

 telnet 172.17.0.1(docker host) 80 

作品。 我如何连接到在主机上运行的docker? 我在Ubuntu 14.04.5 docker上运行版本:17.06.2-ce

您可以启动您的容器,将主机docker套接字安装到容器中。

 docker run -v /var/run/docker.sock:/var/run/docker.sock ... 

通过这个设置,容器中的Docker客户端将使用来自主机的Docker守护进程。 您的容器将能够使用在主机中运行的守护进程来构build,运行,推送等。 请注意,通过这些设置,一切都在主机上进行,所以如果你启动新的容器,它们将是“兄弟”容器。

编辑

如果使用桥接networking,则可以使用主机IP地址连接到主机上运行的任何服务。

例如,我使用IP 10.0.0.1在我的主机上运行mysqld,并从一个容器中运行

 mysql -u user -p -h 10.0.0.1 

诀窍是从容器中找出主机的IP地址。

在Docker for Mac(我正在运行版本17.07.0)就像连接到特殊主机“docker.for.mac.localhost”一样简单

另一个select是将别名IP添加到您的回送接口

 sudo ifconfig lo0 alias 192.168.1.1 

然后在运行容器时为这个别名IP添加一个主机

 docker run --rm -ti --add-host host-machine:192.168.1.1 mysql:5.7 bash 

有了这个设置,在容器内你应该可以做到

 mysql -u user -p -h host-machine