如何把视频里的doclever拆成两个容器部署
来源:4-5 使用Docker搭建本地Mock服务&接口测试服务DOClever
ku咖啡不加糖
2020-03-09 22:14:25
目前我按照视频里的部署步骤能够成功部署doclever。但是我现在有一个需求,先部署好一个mongodb服务,在部署一个纯doclever容器(不含mongo),让doclever直接使用已经部署好的mongodb服务。我试了了一个方法,但是没成功,下面是我写的docker-compose配置
先部署mongo
```
version: '3.1'
services:
mongo:
image: mongo
restart: always
container_name: mongo
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: xxxx
ports:
- 27017:27017
volumes:
- /srv/mongo/db:/data/db
```
再部署doclever
```
version: "2"
services:
DOClever:
image: lw96/doclever
restart: always
container_name: DOClever
ports:
- 10040:10000
volumes:
- /srv/DOClever/file:/root/DOClever/data/file
- /srv/DOClever/img:/root/DOClever/data/img
- /srv/DOClever/tmp:/root/DOClever/data/tmp
environment:
- DB_HOST=mongodb://root:xxx@xxx.xxx.xx.xx:27017/DOClever
- PORT=10000
- DB_FILE=/root/DOClever/data/file
- DB_IMG=/root/DOClever/data/img
- DB_TEMP=/root/DOClever/data/tmp
```
mongo服务能正常用,但是访问不了doclever的10040端口
2回答
Brian
2020-03-10
问题出在:
容器与容器之间网络是隔离的,如果要分两个docker-compose,即是分了两个容器。那么,让两个容器网络互通:1. 使用公网IP,映射公网端口,然后在environment上设置:DB_HOST=公网mongodb url:公网mongodb端口。2. 使用docker network中的bridge桥接,让两个容器在同一个网络中,而把容器配置写在一个docker-compose中,docker会自动的把两个容器的网络加到一起。你可以尝试:
docker network ls 查看所有的docker网络
docker inspect mongodb 查看你自己创建的Mongo,然后查看它的网络是哪个,默认会创建一个。
然后使用docker network connect mongodb的网络 doclever的容器ID,连接两个容器。或者使用docker-compose中的networks: https://docs.docker.com/compose/compose-file/#networks
第三种方案,network_mode: "host",让两个容器使用宿主机的网络,那么端口映射 就没有太大的意义了,网络隔离也没有太大的意义了,两个容器在宿主机上就像是一个局域网,你可以试试。docker inspect mongodb 可以看到它的ip,然后再配置DB_HOST
ku咖啡不加糖
提问者
2020-03-09
想知道该怎么解决,问题出在哪?
相似问题
回答 1
回答 2