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

时间:2017-10-24 17:40:01

标签: docker networking tcp ip

我正在尝试配置docker守护程序,以便我可以从Docker容器内部连接到它,我开始..

所以我将/etc/docker/daemon.json改为

window.addEventListener('load', function(){
    var newVideo = document.getElementById('videoElementId');
    newVideo.addEventListener('ended', function() {
        this.currentTime = 0;
        this.play();
    }, false);

    newVideo.play();

});

所以我通过docker bridge连接到它。但是当我重启docker时我得到了

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

所以首先我的问题是它正在侦听ipv6而不是ipv4。并根据 Make docker use IPv4 for port binding 它应该仍然有效,但它没有..当我尝试

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    

时无法连接
telnet 172.17.0.1(docker host) 2375

的工作原理。如何连接到主机上运行的docker?我在Ubuntu 14.04.5 docker Version:17.06.2-ce

上运行

1 个答案:

答案 0 :(得分:5)

您可以启动将主机泊坞插座安装到容器中的容器。

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

通过此设置,容器内的Docker客户端将使用来自主机的Docker守护程序。您的容器将能够使用在主机中运行的守护程序来构建,运行,推送等。请注意,通过这些设置,一切都在主机上发生,因此如果您启动新容器,它们将成为“兄弟”容器。

修改

如果您使用的是网桥,则可以使用主机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”一样简单

另一种选择是在您的环回接口

中添加别名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