运行 mongodb 个图像时创建的默认卷

Default volumes created while running mongodb images

我正在尝试 运行 mongodb 使用 docker-compose。 每次我重新启动容器时,我都会看到 mongo 创建具有随机名称的默认卷并且卷的数量增加。

为什么会创建这些卷以及如何避免它们。

我的 docker-compose.yml mongo 如下:

mongo:
    image: mongo
    restart: always
    networks:
      - ts-net
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: root
    volumes:
      - db_data:/data/db/

你在问:

Why these volumes are created…?

您所说的卷称为匿名卷。它们通常可以通过 Dockerfile 指令 VOLUME 创建,例如:

github.com/docker-library/mongo/blob/master/5.0/Dockerfile

VOLUME /data/db /data/configdb

这些卷确实有缺点 (i) 它们的 automatically-generated 名称没有引用它们创建的图像,并且 (ii)一旦相应的容器被移除,它们就不会被移除(除非我们use the CLI option docker run --rm)。

how can I avoid them…?

  1. 如果您正在开发自己的基础映像,请避免使用 VOLUME 指令。
  2. 否则,处理依赖于 VOLUME 指令的现有图像的最佳方法是 (i) 找出与给定卷关联的路径,并且 (ii) 将这些路径关联到 docker-compose.yml 规范中的 命名卷 ,即:
services:

  db:
    image: mongo:5.0
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: root
    volumes:
      - 'db_data:/data/db'
      - 'db_config:/data/configdb'
    networks:
      - db-net

networks:
  db-net:
    driver: bridge

volumes:
  db_data:
    driver: local
  db_config:
    driver: local

其他参考文献

有关 VOLUME 的更多 details/remarks,另请参阅: