无法运行具有相同共享卷的多个 mongodb docker 容器

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)

有办法解决这个问题吗?

fab*_*ica 8

问题就在这里:

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"