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

时间:2018-10-05 07:42:21

标签: 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:

有什么办法解决这个问题吗?

1 个答案:

答案 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"