不同容器之间端口通信困惑 for docker

2017-09-05 23:34:00 +08:00
 qsnow6

比如我有 A,B 两个容器,A 容器是 Mongodb 数据库,连接端口是 27017 ;

B 容器是一个 web 服务器,如果需要在 B 容器中使用localhost:27017连接 A 容器中的数据库,应该怎么配置?

4023 次点击
所在节点    问与答
16 条回复
arischow
2017-09-05 23:52:17 +08:00
这两天刚好在弄类似的东西

新建一个 network
然后把他们 connect 起来
https://docs.docker.com/engine/userguide/networking/


如果你用的 docker-compose
用到的是 networks 和 external
https://docs.docker.com/compose/networking/
arischow
2017-09-05 23:52:52 +08:00
OOOOOH NO,我错了
你这个问题在 docker-compose 用 link 就能解决了
arischow
2017-09-06 00:02:34 +08:00
#2 'links' - https://docs.docker.com/compose/compose-file/#links

```
services:
db-mysql:
build: ./db
environment:
- MYSQL_ROOT_PASSWORD=mysql

app-flask:
build: .
expose:
- 5123
environment:
- APP_SETTINGS=instance.config.ProductionConfig
- DATABASE_URL=mysql+pymysql://root:mysql@db-mysql/demo
links:
- db-mysql
```
qsnow6
2017-09-06 00:14:11 +08:00
@arischow 是通过 expose 来把容器 A 的端口暴露给容器 B ?

直接 localhost:port 就可以了吗
qsnow6
2017-09-06 00:18:26 +08:00
我用的也是 flask,数据库在另外一个容器里;

默认数据库地址是:localhost:27017

想在不改变默认配置的情况下通过 localhost:27017 就能访问数据库容器
mooncakejs
2017-09-06 00:19:41 +08:00
把 network 设置成 host,只有这一个方法
arischow
2017-09-06 00:37:34 +08:00
@qsnow6 我还是看错了,你是要用 localhost 访问,sorry
wellsc
2017-09-06 01:27:23 +08:00
@arischow 现在已经不推荐用 link 了
wellsc
2017-09-06 01:29:18 +08:00
Mongo conf 中的 host 设置成 0.0.0.0,a,b 容器在同一网段就可以了。
microhz
2017-09-06 08:12:22 +08:00
可以用 spring cloud config 去配置中心拿地址
hxsf
2017-09-06 08:52:45 +08:00
楼上的各位,docker 容器网络有 container-network 的。。。可以多个容器使用同一网络栈

使用方法 docker run --network container:<id|name> [other-options] <image[:tag]>
这样两个容器就会使用同一个网络栈,做到使用 127.0.0.1 去访问另一个容器监听的端口了。
当然了,多个容器之间无法监听统一端口了
dangyuluo
2017-09-06 08:53:37 +08:00
@hxsf 学习了这个,一直使用 link 来通信的
qsnow6
2017-09-06 10:20:11 +08:00
@hxsf 你说的是`--network=host` 吗
hxsf
2017-09-06 11:09:59 +08:00
@qsnow6 #13 难道我描述有问题? --network container:<id|name>

容器网络
1. none
2. bridge
3. host
4. container
qsnow6
2017-09-06 11:29:12 +08:00
@hxsf 明白了,我看的文档上面,说显示有 none、bridge、host 这三个网络。。。
qsnow6
2017-09-06 11:49:07 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/388459

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX