docker容器间是否可以做端口映射?


例如一个容器A运行mongodb, expose 27010端口,然后webapp运行在容器B,需要连接 127.0.0.1:27010 来和mongodb通讯,如何可以把容器A的27010端口映射到容器B的27010端口呢?
已邀请:

徐新坤 - 京东商城-TIG-JDOS团队

赞同来自: girlskiller


我感觉不用这么麻烦。
你可以直接把容器A和B通过link连接起来,就可以直接通网络了。

liwenqiu - 码农 果粉

赞同来自:


因为webapp默认只从 127.0.0.1:27010 来连接mongodb

如果 link B:A 那在容器里面只是在 /etc/hosts 里面有一条记录 x.x.x.x mongodb 指向A,默认webapp是连不到mongodb 的

tuxknight

赞同来自:


你这个需求很怪,127.0.0.1是host的地址,将运行mongodb的container的端口publish 到host,然后在webapp的container里用127.0.0.1是能够访问到的。

tkdchen

赞同来自:


http://docs.docker.com/usergui ... links

你想要做的是很典型的,同时也是很基本的一个需求。上面首先给出的链接的内容告诉你如何让两个docker container通过link机制相互访问。注意其中一个命令,

<pre>
docker run -d -P --name web --link db:db training/webapp python app.py
</pre>

你可以照猫画虎地应用到你自己的案例里。重点在于--link参数,以及传给它的值db:db。

至于在webapp如何链接到mongodb,你需要首先了解的知识是下面这个链接里给出的内容。

http://docs.docker.com/usergui ... ables

一旦,前面的link成功了,docker会在容器里生成一些列的环境变量,这些环境变量的名称是有规律可寻的,很好记,也很好理解。

在你的webapp中,在配置mongodb的主机地址的地方,传递127.0.0.1显然是不能让它工作的了。此时,你应该读取对应的环境变量的值才行。

一个更具体的例子。

https://github.com/onepiecejs/ ... 23L23

这一行,webapp要分别与redis和mongodb两个container连接。

https://github.com/onepiecejs/ ... 23L20

在这一行,配置webapp的时候,就需要从对应的环境变量读取那个正确的地址和端口。

要回复问题请先登录注册