我有两个Docker容器在运行。一个是MongoDB,一个是运行简单rest API的容器,应该能够查询MongoDB容器。
端口映射
用于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,但它会挂起并超时(永远不会返回结果)。其余配置文件如下所示:
{ "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容器中,我还可以看到每次进行查询时连接数都会增加。
答案 0 :(得分:3)
在docker 1.9之前,你必须使用“一个链接”,但它已被弃用。现在,您应该创建一个“自定义网络”https://docs.docker.com/engine/userguide/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
你需要配置节点使用主机名(与容器名称相同)与Mongo通信,并使用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
};