从docker容器内部连接到docker守护程序

从docker容器内部连接到docker守护程序,docker,networking,tcp,ip,Docker,Networking,Tcp,Ip,我正在尝试配置docker守护进程,以便可以从我启动的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

我正在尝试配置docker守护进程,以便可以从我启动的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上监听的。根据 这一切都应该还能用,但不行。。当我尝试

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守护程序。您的容器将能够使用主机中运行的守护进程来构建、运行、推送等。请注意,通过这些设置,主机上的一切都在进行,因此,如果启动新容器,它们将是“兄弟”容器

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

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

例如,我让mysqld在IP为10.0.0.1的主机上运行,并且可以从一个容器中运行

mysql -u user -p -h 10.0.0.1
诀窍是从容器中找出主机IP地址

docker run -v /var/run/docker.sock:/var/run/docker.sock ...
在Docker for Mac(我运行的是17.07.0版)中,只需连接到特殊主机“Docker.for.Mac.localhost”即可

另一个选项是向环回接口添加别名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

您使用的是网桥IP而不是主机IP。ifconfig的输出是什么?/#ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02 inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0上行广播运行多播MTU:1500度量:1个接收数据包:14个错误:0丢弃:0溢出:0帧:0发送数据包:0错误:0丢弃:0溢出:0载波:0冲突:0 txqueuelen:0接收字节:1108(1.0 KiB)发送字节:0(0.0 B)i尽管容器ip为172.17.0.2,默认路由为主机ip 172.17.0.1。。我可以使用其ip 172.17.0.1连接到主机上运行的端口。。我可以连接到正在0.0.0.0上收听的其他服务,具体如下:::好,酷。。这是一个选择。。但一般来说,我希望能够连接到主机上运行的端口。诸如redis等…@darthShana,请查看我的编辑,并让我知道这是否是您想要的。如果这是正确的,那么请编辑您的问题以指定您要使用TCP/IP.Hi@luciano afranllia进行连接。我尝试按照您的建议将docker套接字安装为一个卷,但我遇到的问题是:java.lang.unsatifiedLinkError:/tmp/libjunixsocket-native-2.0.46148114015950108127.so:libstdc++.so.6:无法打开共享对象文件:否文件或目录您的主机中似乎没有/var/run/docker.sock。检查docker守护进程是否在主机上运行,并在该位置启用和配置本地套接字。我确实有该文件。。我可以使用主机上的插座。。只是在我将文件作为卷装入后,不是从docker容器中