Как часть моего стремления полностью понять, как докер работает с томами под капотом (в продолжение моего предыдущего поста ), мне любопытно, как работает docker-compose stop
с томами.
Возможны две возможности:
- Тома отключаются после выполнения
docker-compose stop
и затем снова монтируются в лексографическом порядке при выполнении docker-compose start
. - Тома остаются подключенными до тех пор, пока контейнер не будет удален с помощью
docker-compose rm
или аналогичной команды.
Мне было любопытно, что даже перезапуск остановленного контейнера создаст пустой каталог в моей папке хоста.В моем docker-compose.yml
есть следующее:
volumes:
- .:/var/www/app
- my_modules:/var/www/app/node_modules
Итак, из моего понимания ответа в связанном посте выше, создается пустой каталог из-за следующего:
- Bind mount происходит первым (лексографический порядок), перезаписывает все в
/var/www/app
- Docker попытается смонтировать
node_modules
, но, так как каталог больше не существует в контейнере (перезаписан), он будет mkdir node_modules
чтобы иметь каталог для монтирования именованного тома. - Так как монтирование bind уже существует, когда происходит
mkdir
, я вижу новую пустую папку node_modules
на моем хосте.
Это имеет смысл, если тома монтируются, но если 2) имеет значение true и они остаются смонтированными даже после запуска docker-compose stop
, почему я все еще вижу, что на моем хосте создается пустой каталог?Я удаляю node-modules
с моего хоста между командами stop
и up
для воспроизведения этого поведения.