概述
問題描述:
現有 mongo, explorer 兩個實例分別使用 docker-compose.yml 啓動,這兩個實例在同一臺宿主機上,其中 explorer 需要與 mongo 通信,採用 DB_URL=host:port
是無法與 mongo 建立連接的。
問題分析:
每一個 docker-compose 啓動時,都會默認的使用一個 bridge 類型的網絡,由於 mongo 和 explorer 不是在同一個 docker-compose 中,所以這兩個實例是在兩個不同的網絡中,所以直接使用 DB_URL=host:port
是無法與 mongo 通信的。
解決方式:
方式一: 使 mongo 和 explorer 位於同一 network 中。
- 將 mongo 和 explorer 寫在同一個 docker-compose.yml 文件中,那麼這兩個實例就可以互相通信
- mongo 和 explorer 任可以不位於同一個 docker-compose 文件中,但在啓動時,需要顯示的聲明爲同一個 network。
方式二:更改 container 的 network_mode
將 mongo 和 exploer container 中的 network_mode
更改爲 host
,在 explorer 中便可以使用 DB_URL=host:port
來和 mongo 通信。
但需注意,此種方式 container 是直接使用宿主機的 ip 和 port,有可能存在端口衝突的情況(容器內端口映射不再生效)
實例
1. 創建 network
docker network create net-erp
2. 需要相互通信的 container 使用同一 network
mongodb
version: '2'
services:
erp-mongo:
image: mongo
container_name: erp-mongo
ports:
- "27217:27017"
volumes:
- /mnt/volumes/mongo-erp:/data/db
networks:
- net-mongo
environment:
MONGO_INITDB_ROOT_USERNAME: root_name
MONGO_INITDB_ROOT_PASSWORD: root_password
networks:
net-mongo:
external:
name: net-erp
explorer
version: "2"
services:
erp-explorer:
image: kaifei/erp_explorer:v1.0
container_name: erp-explorer
ports:
- "9180:8080"
networks:
- net-explorer
environment:
- DB_URL=erp-mongo:27017
- DB_USER=user
- DB_PASSWORD=password
- DB_DATABASE=db_name
- CHAIN_ID=BEAN-eRp
networks:
net-explorer:
external:
name: net-erp
說明:
- 同一 network 的 container 可以通過 container_name(或 ip) 互相通信,如
explorer
需要連接mongodb
,可通過如下方式:DB_URL=erp-mongo:27017