如何让两个Docker容器相互通话?
我有两个Docker容器正在运行。 一个是MongoDB,另一个是运行简单的rest API的容器,它应该能够查询MongoDB容器。
端口映射
- 0.0.0.0:28001->27017/tcp(mongodb)
- 0.0.0.0:3000->3000/tcp(restapi)
用于MongoDB映像的命令
docker run -p 28001:27017 -v /home/ubuntu/docker/mongodb/mongod.conf:/etc/mongod.conf --name mongodb_container -d mongodb_image
我重写mongo.conf来添加0.0.0.0来绑定IP
net: port: 27017 bindIp: [127.0.0.1,0.0.0.0]
用于API的运行命令:
docker container run -it -v /home/ubuntu/docker/node_modules:/usr/lib/node_modules -p 3000:3000 --name rest_container rest_image /bin/bash
我能够查询其余的API,但它挂起和超时(永远不会返回结果)。 其余的configuration文件如下所示:
{ "db": { 'port': 28001, 'host': "192.168.123.191" }, 'server': { 'port': 3000, 'timeout': 120, 'address': "0.0.0.0" }, 'flavor': "regular", 'debug': true };
其余api容器的内部IP:
172.17.0.4
mongodb容器的内部IP:
172.17.0.2
我知道API的工作原理,因为我能够执行查询,而无需在docker上运行程序。 端口27017和3000都暴露在Dockerfile中。 在MongoDB容器中,我还可以看到每次查询时连接数都会增加。
在docker 1.9之前,你必须使用“一个链接”,但它已被弃用。 现在你应该创build一个“自定义networking” https://docs.docker.com/engine/userguide/networking )并在这个networking中运行你的容器。
例如 :
docker network create --driver bridge my_network docker run --network=my_network -p 28001:27017 -v /home/ubuntu/docker/mongodb/mongod.conf:/etc/mongod.conf --name mongodb_container -d mongodb_image docker container run --network=my_network -it -v /home/ubuntu/docker/node_modules:/usr/lib/node_modules -p 3000:3000 --name rest_container rest_image /bin/bash
你需要configuration节点与Mongo使用主机名(这是与containe'rs的名称相同)和使用Mongo容器的端口而不是外部端口,我的意思是端口27017不是28001.这就是为什么端口绑定-p 28001: 27017
是不必要的,除非你想从外部访问它。
{ "db": { 'port': 27017, 'host': "mongodb_container" }, 'server': { 'port': 3000, 'timeout': 120, 'address': "0.0.0.0" }, 'flavor': "regular", 'debug': true };