#docker #docker-compose #docker-machine #docker-desktop
#docker #docker-compose #docker-machine #docker-рабочий стол
Вопрос:
Чтобы отслеживать используемые тома, мне нравится использовать именованные тома. В настоящее время у меня есть один именованный том
docker volume ls
DRIVER VOLUME NAME
local mongodb
мой файл docker-compose выглядит примерно так:
version: "3"
services:
db:
image: mongo:4.0.6
container_name: mongo
ports:
- 27017:27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: macmongoroot
volumes:
- mongodb:/data/db
volumes:
mongodb:
external:
name: mongodb
networks:
default:
external:
name: macbook
каждый раз, когда я запускаю docker-compose docker-compose up -d
docker compose добавляет новый анонимный том, а не использует именованный :
docker volume ls
DRIVER VOLUME NAME
local a4a02fffa9bbbdd11c76359264a5bf24614943c5b1b0070b33a84e51266c58d7
local mongodb
этот файл docker compose отлично работает на моем сервере, но на моем рабочем столе docker у меня возникла эта проблема. в настоящее время используется Docker Desktop версии 2.0.0.3 (31259). Буду признателен за любую помощь, спасибо
Комментарии:
1. какие версии у ваших программ docker-compose? (
docker-compose version
)2. @Thomasleveil в настоящее время я использую docker-compose версии 1.23.2, docker-machine версии 0.16.1 и docker engine версии 18.09.2
3. эти версии находятся на вашем сервере или рабочем столе? Одинаковы ли версии на сервере и на рабочем столе?
4. @Thomasleveil на моем рабочем столе. нет, версия сервера немного старше
Ответ №1:
Анонимный том принадлежит /data/configdb
которому в инструкциях Dockerfile
VOLUME /data/db /data/configdb
Выполнив docker inspect
над созданным контейнером, вы заметите следующее:
"Mounts": [
{
"Type": "volume",
"Name": "mongodb",
"Source": "/var/lib/docker/volumes/mongodb/_data",
"Destination": "/data/db",
"Driver": "local",
"Mode": "rw",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "be86274b1f6009eb60b8acb3855f51931c4ccc7df700666555422396688b0dd6",
"Source": "/var/lib/docker/volumes/be86274b1f6009eb60b8acb3855f51931c4ccc7df700666555422396688b0dd6/_data",
"Destination": "/data/configdb",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
Это означает, что mongodb
том фактически используется для данных, как вы просили, однако для этого будет создан другой том /data/configdb
. Также вы можете убедиться в существовании данных, проверив этот исходный путь /var/lib/docker/volumes/mongodb/_data
, где будут сохранены данные mongodb
$ ls /var/lib/docker/volumes/mongodb/_data total 328
drwxr-xr-x 4 999 999 4096 Mar 8 11:02 .
drwxr-xr-x 3 root root 4096 Mar 8 10:58 ..
-rw------- 1 999 999 16384 Mar 8 11:00 collection-0--2358474299739251284.wt
-rw------- 1 999 999 36864 Mar 8 11:01 collection-2--2358474299739251284.wt
-rw------- 1 999 999 4096 Mar 8 11:00 collection-4--2358474299739251284.wt
-rw------- 1 999 999 16384 Mar 8 11:00 collection-7--2358474299739251284.wt
drwx------ 2 999 999 4096 Mar 8 11:11 diagnostic.data
-rw------- 1 999 999 16384 Mar 8 11:00 index-1--2358474299739251284.wt
-rw------- 1 999 999 36864 Mar 8 11:01 index-3--2358474299739251284.wt
-rw------- 1 999 999 4096 Mar 8 10:58 index-5--2358474299739251284.wt
-rw------- 1 999 999 4096 Mar 8 11:01 index-6--2358474299739251284.wt
-rw------- 1 999 999 16384 Mar 8 10:58 index-8--2358474299739251284.wt
-rw------- 1 999 999 16384 Mar 8 10:58 index-9--2358474299739251284.wt
drwx------ 2 999 999 4096 Mar 8 11:00 journal
-rw------- 1 999 999 16384 Mar 8 11:00 _mdb_catalog.wt
-rw------- 1 999 999 2 Mar 8 11:00 mongod.lock
-rw------- 1 999 999 36864 Mar 8 11:02 sizeStorer.wt
-rw------- 1 999 999 114 Mar 8 10:58 storage.bson
-rw------- 1 999 999 45 Mar 8 10:58 WiredTiger
-rw------- 1 999 999 4096 Mar 8 11:00 WiredTigerLAS.wt
-rw------- 1 999 999 21 Mar 8 10:58 WiredTiger.lock
-rw------- 1 999 999 1065 Mar 8 11:02 WiredTiger.turtle
-rw------- 1 999 999 69632 Mar 8 11:02 WiredTiger.wt
Комментарии:
1. спасибо, что прояснилось, почему существует другой том, но моя проблема по-прежнему остается в том, что каждый раз, когда я делаю
docker-compose down
затем делаюdocker-compose up -d
, кажется, что все мои данные mongodb удаляются. позже я попытаюсь выполнить docker inspect и опубликовать его здесь.2. Данные не будут удалены, поскольку они находятся на внешнем томе. Я протестировал его, и у меня все еще существуют старые данные
Ответ №2:
Чтобы предотвратить создание Docker compose анонимных томов для контейнера изображений MongoDB, вы должны выполнить привязку /data/db
и /data/configdb
следующим образом:
version: "3"
services:
db:
image: mongo:4.0.6
volumes:
- mongodb-data:/data/db
- mongodb-config:/data/configdb
volumes:
mongodb-data:
mongodb-config:
В общем, если вы хотите запретить какому-либо контейнеру изображений DB генерировать анонимные тома, вы можете запустить в командной строке docker inspect <container-name>
или docker container inspect <container-name>
, затем найдите объект Mounts и посмотрите ключ / значение назначения, чтобы узнать, что привязать к определению docker-compose