我想用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:
有什么办法解决这个问题吗?
答案 0 :(得分:0)
问题在这里:
mongo容器与docker主机具有相同的共享卷
您不能在同一数据目录上运行两个mongo实例。这会导致数据损坏和奇怪的问题,因此mongo-db明确禁止这样做(另请参见this问题)
您为什么要这样做?通常,您将为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:
此外,您应该考虑使用命名卷,而不是主机路径。这样,您无需在启动compose文件之前在主机上创建目录。要使用命名卷,只需将卷声明从"/var/lib/mongodb-back:/data/db"
更改为"mongodb-back:/data/db"