mongo部署在一个容器(mongo_docker)中,vessel-service部署在另一个容器中,vessel-service需要连接mongo进行数据存储。无法在vessel-service中指定容器名称(mongo_docker)来访问数据库。可以通过容器的ip地址访问,但每次重新启动mongo容器需要更改ip地址。解决方案是将两个容器连接到同一个自定义网络(不能连接到默认的bridge网络)参考
查看当前docker的所有网络
docker network ps
结果为:
NETWORK ID NAME DRIVER SCOPE
f4b027932b98 bridge bridge local
69d5067d1f1d example_default bridge local
3c674f3141a5 host host local
42bc12005869 nei_default bridge local
c5a9dcaffc73 none null local
3f59da073ade shippy_default bridge local
创建自定义网络bridge1
docker network create -d bridge bridge1
再次查看所有网络,发现bridge1创建成功
NETWORK ID NAME DRIVER SCOPE
f4b027932b98 bridge bridge local
5148726d7f33 bridge1 bridge local
69d5067d1f1d example_default bridge local
3c674f3141a5 host host local
42bc12005869 nei_default bridge local
c5a9dcaffc73 none null local
3f59da073ade shippy_default bridge local
启动mongo容器并连接到网络bridge1
docker run -p 27017:27017 --name mongo_docker --network bridge1 mongo
启动vessel-service容器并连接到网络bridge1
docker run -p 50052:50051 -e MICRO_SERVER_ADDRESS=:50051 -e MICRO_REGISTRY=mdns
-e DB_HOST=mongo_docker:27017 --network bridge1 vessel-service
在vessel-service中可以通过容器名:端口(mongo_docker:27017)连接到mongo服务。
也可通过ping mongo_docker 进行网络测试。
查看网络bridge1的网络详情
docker network inspect bridge1
结果为:
[
{
"Name": "bridge1",
"Id": "5148726d7f336f8676b618918ee9d2f47a9a8a833e27978f9ebfc13772e69bf9",
"Created": "2020-11-08T08:09:48.3779293Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.24.0.0/16",
"Gateway": "172.24.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"3b8f80727012acfb1ba96a2ecbc2256a7419527864136eeb99fcaaf6d4398997": {
"Name": "mongo_docker",
"EndpointID": "ca0151bc6ffab5d6e6d4fef97758233d260c126452cca00935458dbee4988de1",
"MacAddress": "02:42:ac:18:00:02",
"IPv4Address": "172.24.0.2/16",
"IPv6Address": ""
},
"a5bfd52a09e602cc81a1118ad927b307b5533a421bc2f4c53f6bba58762643f7": {
"Name": "nifty_shannon",
"EndpointID": "3a0f18514b391353bdb9f18a6269ca13ef7ef49f6eb35e05006b4938fda015d6",
"MacAddress": "02:42:ac:18:00:03",
"IPv4Address": "172.24.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
发现改网络下有两个容器,分别为mongo与vessel-device