Это не должно быть сложно, но я не могу понять это. У меня есть контейнер и используется -v /tester
в команде запуска docker. Затем я делаю docker exec ti containername /bin/bash
. Затем я создаю файл с именем /tester/stayhere.txt с vi /tester/stayhere.txt
. Затем я сохраняю файл и проверяю его. Затем я делаю фиксацию докеров и запускаю новое изображение, а файл stayhere.txt отсутствует. Что я делаю не так?Персистские файлы данных в контейнере докеров
ответ
Когда вы монтируете том внутри контейнера докера с -v
, он не считается частью самого контейнера. Вот почему, когда вы совершаете изменения, это отсутствует.
Согласно Docker документаций:
Объем данных является специально отведенным для каталога в пределах одного или нескольких контейнеров, минует Союз файловой системы.
И:
Объемы инициализируются при создании контейнера. Если базовое изображение контейнера содержит данные в указанной точке монтирования, то существующие данные копируются в новый том после инициализации тома.
Что это означает, объемы данных живут за пределами Союза Filesystem и если вы даже удалить этот объем контейнера данных по-прежнему сохраняется:
объемы данных предназначены для сохранения данных, независимо от контейнера жизненный цикл. Поэтому Docker никогда автоматически не удаляет тома при удалении контейнера, и он не «собирает мусор» тома, на которые контейнер больше не ссылается.
Таким образом, они не являются частью вашей команды фиксации докеров.
Для того, чтобы добиться желаемого результата, вам необходимо скопировать файл по тому же пути на вашем изображении, пока он не установлен в качестве объема докеров.Вы можете использовать Dockerfile или сразу запустить контейнер и изменить файловую систему, а затем зафиксировать.
В следующий раз, когда вы запускаете контейнер с томом, и вы должны быть в состоянии видеть эти файлы.
Не могу сказать, без каких команд вы работаете. Я бы предположил, что вы действительно не начинаете «новый» образ каким-то образом. Я думаю, это было бы потому, что вы «начинаете» его с docker exec
(который запускает вещи в запущенном контейнере), а не docker run
.
В целом, хотя я бы предположил, что это плохая практика изменения и фиксации. То, что вы действительно должны делать, - это что-то, что является частью сборки вашей вещи, которую вы должны делать во время сборки (с Dockerfile
).
Все, что является постоянным состоянием, вы должны монтировать в свой контейнер - либо с помощью тома, либо в контейнере для хранения.
Это не очень легко создать одну из них:
docker create -v /path/to/data --name my_storage_container base-image-name /bin/true
А затем начать свой контейнер с чистой сборки картинки:
docker run -it --volumes-from my_storage_container image /bin/bash
Файлы записываемой затем должны сохраняться, независимо от того, сколько вы беспорядок вокруг с изображением.
- 1. Программно удаляет файлы/папку в контейнере докеров
- 2. haproxy в контейнере докеров
- 3. Просмотр файлов в контейнере докеров
- 4. Установка базы данных Oracle в контейнере докеров
- 5. Отменить изменения в контейнере докеров
- 6. Клиенты Eureka в контейнере докеров
- 7. Почему я не вижу файлы в контейнере докеров?
- 8. Персистские куки-файлы через экземпляры NightmareJS
- 9. Play framework автозагрузка в контейнере докеров
- 10. Простой веб-сервер REST в контейнере докеров
- 11. Проблемы с производительностью, работающие с базой данных в контейнере докеров
- 12. База данных Oracle11g с длинным запуском в контейнере докеров
- 13. Параллельные тестовые процессы в контейнере докеров
- 14. Почему setfacl не работает в контейнере докеров?
- 15. с использованием пользователей NIS в контейнере докеров
- 16. Как запустить команду в связанном контейнере докеров?
- 17. Переменная окружения в контейнере PHP-докеров
- 18. Где находится jenkins.xml в контейнере докеров-денкинсов
- 19. Мониторинг MySQL работает в контейнере докеров?
- 20. Godep не работает в контейнере докеров
- 21. монтировать внешние тома в контейнере для докеров
- 22. развернуть wso2esb в контейнере докеров с кубернетами
- 23. Следуйте картографированию портов докеров в контейнере
- 24. Как запустить скрипт в контейнере докеров
- 25. Включить JMX в контейнере докеров Tomcat
- 26. Управление дисками (очистка) в остановленном контейнере докеров
- 27. Почему люди создают virtualenv в контейнере докеров?
- 28. Изящно останавливая сельдерей в контейнере для докеров
- 29. Запуск и развертывание рельсов в контейнере докеров
- 30. Использование ключей SSH в контейнере докеров
Thanks Sobrique Я не думаю, что у меня есть то, что вы говорите, но я упростил проблему, чтобы попытаться получить ответ. В основном, моя ситуация заключается в том, что у меня есть докер, работающий в AWS и докере, работающем в облаке IBM. Контейнер, который я запускал в AWS, я хотел бы экспортировать и запускать в облаке IBM, но независимо от того, что я делаю, я не могу заставить файлы оставаться. Как вы предлагаете мне переместить контейнер и файлы в облако IBM? –
Я попытался сохранить docker, экспортировать, зафиксировать, но я думаю, что вы говорите мне, что, возможно, я должен использовать docker cp, чтобы вытащить файлы из контейнера и установить их в новый контейнер ... это кажется странным, потому что то я должен переместить изображение докеры и набор данных. Это нарушает мое понимание контейнеров ... почему бы не поместить все это в контейнер и не переместить его? –
Возможно, я смогу расширить его, если вы можете опубликовать историю команд точно, что вы побежали. – Sobrique