mongod --bind_ip使用docker-compose版本2 [英] mongod --bind_ip using docker-compose version 2
问题描述
我正在尝试使用docker-compose
连接在docker上运行的两个mongodb容器.一个容器使用mongoimport
将一些数据播种到另一个容器.
I'm trying to connect two mongodb containers running on docker using docker-compose
. One container seed some data to the other using mongoimport
.
但是,运行mongoimport
Failed: error connecting to db server: no reachable servers
实际上我可以从mongo-seed
到达mongodb
容器,因为我已经在CMD
后面附加了ping -c 3 mongodb
并且该容器可以成功解析该主机名.
I can actually reach the mongodb
container from mongo-seed
since I'd appended a ping -c 3 mongodb
to the CMD
and the container can resolve successfully that hostname.
在我正在使用的文件下面:
Below the files I'm using:
docker-compose.yml
version: '2'
services:
mongodb:
image: mongo:3.2
ports:
- "27017:27017"
mongo-seed:
build: ./mongo-seed
mongo-seed/Dockerfile
FROM mongo:3.2
COPY init.json /init.json
CMD ping -c 3 mongodb && mongoimport --host mongodb --db test --collection users \
--type json --file /init.json --jsonArray
mongo-seed/init.json
[
{
"name": "Joe Smith",
"email": "jsmith@gmail.com",
"age": 40,
"admin": false
},
{
"name": "Jen Ford",
"email": "jford@gmail.com",
"age": 45,
"admin": true
}
]
这是docker-compose up
的输出:
mongo-seed_1 | PING mongodb (172.18.0.2): 48 data bytes
mongo-seed_1 | 56 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.116 ms
mongo-seed_1 | 56 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.141 ms
mongo-seed_1 | 56 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.114 ms
mongo-seed_1 | --- mongodb ping statistics ---
mongo-seed_1 | 3 packets transmitted, 3 packets received, 0% packet loss
mongo-seed_1 | round-trip min/avg/max/stddev = 0.114/0.124/0.141/0.000 ms
mongo-seed_1 | 2016-08-09T20:34:15.728+0000 [........................] smtt.devices 0.0 B/25.5 MB (0.0%)
mongo-seed_1 | 2016-08-09T20:34:17.992+0000 [........................] smtt.devices 0.0 B/25.5 MB (0.0%)
mongo-seed_1 | 2016-08-09T20:34:17.992+0000 Failed: error connecting to db server: no reachable servers
mongo-seed_1 | 2016-08-09T20:34:17.992+0000 imported 0 documents
mongo_mongo-seed_1 exited with code 1
有什么主意吗?我想念什么?
Any idea? What am I missing?
推荐答案
我终于可以设法连接两个容器.我的发现是出于文档目的.
I could finally manage to get connected both containers. My findings here for documentation purposes.
-
docker-compose
版本2创建一个bridge
网络并将所有容器添加到其中. -
mongod
不知道此网络,因此未绑定到该ip.默认情况下,仅绑定到127.0.0.1
-
mongoimport
无法使用容器名称建立连接,即使应该将其转换为容器ip.
docker-compose
version 2 creates abridge
network and adds all the containers to it.mongod
is not aware of this network and therefore doesn't bind to that ip. By default, binds only to127.0.0.1
mongoimport
could not establish connection using container name, even though it's supposed to be translated to the container ip.
- 通过
network
的显式定义为mongodb分配静态IP
- 使用
--bind_ip
标志指向该静态ip的初始化mongo容器 - 使用IP地址代替
mongoimport
的主机名
- Assign an static IP for the mongodb through the explicit definition of a
network
- Init mongo container with
--bind_ip
flag pointing to that static ip - Use ip address instead of hostname with
mongoimport
docker-compose.yml
version: '2'
services:
mongodb:
image: mongo:3.2
ports:
- "27017:27017"
networks:
mongo_net:
ipv4_address: 172.16.0.1
command: mongod --bind_ip 127.0.0.1,172.16.0.1
mongo-seed:
build: ./mongo-seed
networks:
mongo_net:
depends_on:
- mongodb
networks:
mongo_net:
driver: bridge
ipam:
config:
- subnet: 172.16.0.0/24
gateway: 172.16.0.254
mongo-seed/Dockerfile
FROM mongo:3.2
COPY init.json /init.json
CMD mongoimport --host 172.16.0.1 --db test --collection users \
--type json --file /init.json --jsonArray
这篇关于mongod --bind_ip使用docker-compose版本2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!