#docker #docker-compose #containers
#docker #docker-compose #контейнеры
Вопрос:
У меня есть docker-контейнер с установленной средой Python3 и различными библиотеками.
Я пытаюсь разработать простую программу на Python для этой среды.
Итак, у меня есть том с моим исходным кодом вне контейнера, который добавлен и установлен как WORKDIR в Dockerfile.
Затем я запускаю контейнер и пытаюсь запустить программу из командной строки.
Когда я сталкиваюсь с ошибкой, я хочу просто изменить исходный код в моем редакторе, который находится за пределами контейнера, и запустить снова.
Однако, когда я делаю это, исполняемый код в контейнере, похоже, не обращает никакого внимания на внесенные мной изменения.
Если я сделаю
docker-compose up --build
и перестройте контейнер, затем он это сделает.
Очевидно, что это происходит очень медленно.
Конечно, контейнер должен иметь возможность видеть изменения в коде, над которым я работаю, без перестройки? Если да, то как мне это сделать?
Комментарии:
1. пожалуйста, взгляните на монтирование
2. docs.docker.com/compose/compose-file/#volumes в вашем случае вам нужно использовать type:bind
Ответ №1:
Использование ADD
загружает файлы в образ контейнера, поэтому, как вы заметили, обновление файлов в запущенном приложении требует перестроения и перезапуска всего контейнера. Чтобы обойти это, вы можете смонтировать каталог на вашем хост-компьютере по пути, который вы скопировали в свой контейнер, используя ADD
.
Чтобы сделать это с помощью Docker, вы можете использовать -v
или --volume
. Используя Docker Compose, вы можете указать каталог, который будет смонтирован под volumes:
. Например, если у вас было следующее в вашем файле сборки:
# Copy app code into the container working directory
ADD /my/app/code /usr/app/src
Затем вы можете смонтировать свой текущий код поверх встроенных файлов во время запуска контейнера (обратите внимание, что пути к каталогам должны быть абсолютными — для этого вы можете использовать $PWD
):
$ docker run -v /my/live/app/code:/usr/app/src python:latest
$ docker run -v "$PWD"/app/code:/usr/app/src python:latest
docker-compose.yml
Эквивалент выглядит следующим образом:
my-service:
image: python:latest
volumes:
- /my/live/app/code:/usr/app/src
- ./relative/paths:/work/too
Больше о привязке монтируется в документации.