连接Docker容器

你好有帮助的开发者,

我有问题连接docker集装箱。 我已经build立了一个subversion docker容器和一个mongo docker容器。

docker run -d -p 3343:3343 -p 4434:4434 -p 18080:18080 –name svn-server mamohr / subversion-edge

docker运行-p 27017:27017 – 名称my-mongo -d mongo

我可以从浏览器中打开http:// xxxx:18080 / ,但无法从my-mongo实例中curl。 我可以从我的开发机器上与每个容器交谈,但无法从容器与容器进行交谈。

我看到的东西像–net = bridge,host,????,但是我感到困惑。

请帮忙…..

为了让你立即去,你可以用–net = host来启动你的主机,然后容器和主机都能够通信。 或者你可以使用从mongo到另一个容器的链接(–link)。

有很多关于dockernetworking的解释,docker文件将是很好的开始。

请参阅https://docs.docker.com/engine/userguide/networking/dockernetworks/上的文档

我会build议你看看docker写作。 我认为这是pipe理一个由许多容器组成的系统的最好方法。

这里是官方指南: https : //docs.docker.com/compose/

默认情况下,Docker容器开始连接到名为default的桥接networking。 你可以做docker network ls ,看看你有可用的networking。 你也可以创build不同属性的networking等…

所以在你的情况下,你的容器都在同一个defaultnetworking上启动,这意味着它们应该能够相互通信。 事实上,如果你只想让你的SVN服务器能够与Mongo交谈(并且不需要从你的主机连接到mongo),你甚至不需要公开Mongo容器上的端口。 与每个networking相同的networking上的容器可以相互通信,而无需暴露端口。 公开端口是允许主机>容器连接。

那么,当你试图将mongo实例curl到你的SVN实例时,你使用的是什么主机名/端口? 您应该使用svn-server因为这将parsing到SVN容器(使用Docker的内置DNSparsing)。

从SDN hub借用这个模式,想象一下C1是你的SVN容器,C2是你的Mongo容器:

Docker网络

两个容器都连接到docker0网桥,并NAT到外部192.168.50.16networking。

要从Mongo容器连接,请检查SVN容器的bridge0 IP地址:

 # docker inspect <svn-container-name> "Networks": { "bridge0": { "IPAddress": "172.17.0.19", } 

然后CURL直接到它的bridge0 IP地址:

 curl http://172.17.0.19:18080/ 

通过容器名称将容器直接连接到容器联网可以通过用户定义的networking实现 。

 docker network create mynet docker run -d --net=mynet --name svn-server mamohr/subversion-edge docker run -d --net=mynet --name my-mongo mongo docker exec <svn-id> ping my-mongo docker exec <mongo-id> ping svn-server 

即使在当前的设置中,您也应该始终能够连接到映射的端口。 主机运行一个侦听该端口的进程,这样任何主机IP都应该这样做。

 $ docker run -d -p 8080:80 --net=mynet --name sleep busybox nc -lp 80 -e echo here! 63115ef88664f1186ea012e41138747725790383c741c12ca8675c3058383e68 $ ss -lntp | grep 8080 LISTEN 0 128 :::8080 :::* users:(("exe",pid=6287,fd=4)) $ docker run busybox nc <any_host_ip> 8080 here!