Я понимаю, что это старый и разрешенный поток, где ОП указывал на каталог в контейнере, а не на том томе, который они установили, но хотел прояснить некоторые из дезинформации, которые я вижу.
docker-compose down
не удаляет тома, вам нужно запустить docker-compose down -v
, если вы также хотите удалить тома.Вот текст справки прямо из Докер-композе (обратите внимание на «по умолчанию» список):
$ docker-compose down --help
Stops containers and removes containers, networks, volumes, and images
created by `up`.
By default, the only things removed are:
- Containers for services defined in the Compose file
- Networks defined in the `networks` section of the Compose file
- The default network, if one is used
Networks and volumes defined as `external` are never removed.
Usage: down [options]
Options:
...
-v, --volumes Remove named volumes declared in the `volumes` section
of the Compose file and anonymous volumes
attached to containers.
...
$ docker-compose --version
docker-compose version 1.12.0, build b31ff33
Вот образец YML с именем тома для тестирования и фиктивной команды:
$ cat docker-compose.vol-named.yml
version: '2'
volumes:
data:
services:
test:
image: busybox
command: tail -f /dev/null
volumes:
- data:/data
$ docker-compose -f docker-compose.vol-named.yml up -d
Creating volume "test_data" with default driver
Creating test_test_1
После запуска в контейнере объем инициализируется пустым, так как в этом месте изображение пуст. Я создал быстрый мир привета в этом месте:
$ docker exec -it test_test_1 /bin/sh
/# ls -al /data
total 8
drwxr-xr-x 2 root root 4096 May 23 01:24 .
drwxr-xr-x 1 root root 4096 May 23 01:24 ..
/# echo "hello volume" >/data/hello.txt
/# ls -al /data
total 12
drwxr-xr-x 2 root root 4096 May 23 01:24 .
drwxr-xr-x 1 root root 4096 May 23 01:24 ..
-rw-r--r-- 1 root root 13 May 23 01:24 hello.txt
/# cat /data/hello.txt
hello volume
/# exit
Объем виден снаружи грузчика и еще там после docker-compose down
:
$ docker volume ls | grep test_
local test_data
$ docker-compose -f docker-compose.vol-named.yml down
Stopping test_test_1 ... done
Removing test_test_1 ... done
Removing network test_default
$ docker volume ls | grep test_
local test_data
Воссоздания контейнера использует старый объем с файлом еще видны внутри:
$ docker-compose -f docker-compose.vol-named.yml up -d
Creating network "test_default" with the default driver
Creating test_test_1
$ docker exec -it test_test_1 /bin/sh
/# cat /data/hello.txt
hello volume
/# exit
и работает docker-compose down -v
наконец удаляет как контейнер и объем:
$ docker-compose -f docker-compose.vol-named.yml down -v
Stopping test_test_1 ... done
Removing test_test_1 ... done
Removing network test_default
Removing volume test_data
$ docker volume ls | grep test_
$
Если вы обнаружили, что ваши данные только время сохраняются, если вы используете стоп/старт, а не вниз/вверх, то ваши данные хранятся в контейнере, а не объем, а емкость не является постоянным , Убедитесь, что место для ваших данных внутри контейнера правильно, чтобы этого избежать.
Я бы попробовал без контейнера memsqldata. Поскольку вы используете именованный том, вам не нужен контейнер объема данных. Я попробовал 'down', и он не удаляет тома по умолчанию. – dnephin
Возможно ли, что данные mysql не находятся в томе? Я не думаю, что он обычно использует '/ data'. – dnephin