运行 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…?
- 如果您正在开发自己的基础映像,请避免使用
VOLUME
指令。
- 否则,处理依赖于
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,另请参阅:
- SO 问题 Why do some Docker images have no VOLUME defined? by @s3-89
- 这个不错blog article by @BMitch
我正在尝试 运行 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…?
- 如果您正在开发自己的基础映像,请避免使用
VOLUME
指令。 - 否则,处理依赖于
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,另请参阅:
- SO 问题 Why do some Docker images have no VOLUME defined? by @s3-89
- 这个不错blog article by @BMitch