Fer*_*ndo 7 mongodb docker docker-compose
我想使用 docker compose 运行两个 mongo docker 容器。mongo 容器与 docker 主机具有相同的共享卷。当我用 docker compose 运行它时,只有一个 mongo 容器在工作,同时另一个容器正在关闭,因为它说
DBPathInUse:无法锁定锁定文件:/data/db/mongod.lock(未知错误)。另一个 mongod 实例已经在 /data/db 目录上运行,正在终止
这是我的 docker compose 文件
version: '3'
services:
frontend:
image: fernandomaxwell/frontend
ports:
- "3007:3007"
networks:
main:
database_frontend:
backend:
image: fernandomaxwell/backend
ports:
- "2007:2007"
networks:
main:
database_backend:
mongo_backend:
image: mongo
volumes:
- "/var/lib/mongodb:/data/db"
ports:
- "27017:27017"
networks:
database_backend:
mongo_frontend:
image: mongo
volumes:
- "/var/lib/mongodb:/data/db"
ports:
- "27018:27017"
networks:
database_frontend:
networks:
main:
database_backend:
database_frontend:
Run Code Online (Sandbox Code Playgroud)
有办法解决这个问题吗?
问题就在这里:
mongo 容器与 docker 主机具有相同的共享卷
您不能在同一数据目录上运行两个 mongo 实例。这会导致数据损坏和奇怪的问题,因此 mongo-db 明确禁止这样做(另请参阅此处的这个问题)
你为什么要这样做?通常,您会为 mongo 实例提供两个不同的卷,如下所示:
version: '3'
services:
frontend:
image: fernandomaxwell/frontend
ports:
- "3007:3007"
networks:
main:
database_frontend:
backend:
image: fernandomaxwell/backend
ports:
- "2007:2007"
networks:
main:
database_backend:
mongo_backend:
image: mongo
volumes:
- "/var/lib/mongodb-back:/data/db"
ports:
- "27017:27017"
networks:
database_backend:
mongo_frontend:
image: mongo
volumes:
- "/var/lib/mongodb-front:/data/db"
ports:
- "27018:27017"
networks:
database_frontend:
networks:
main:
database_backend:
database_frontend:
Run Code Online (Sandbox Code Playgroud)
此外,您应该考虑使用命名卷,而不是主机路径。这样做,您不需要在启动撰写文件之前在主机上创建目录。要使用命名卷,只需将卷声明从 更改"/var/lib/mongodb-back:/data/db"为"mongodb-back:/data/db"
| 归档时间: |
|
| 查看次数: |
9123 次 |
| 最近记录: |