Разработка в docker-compose. Получение контейнера для распознавания изменений кода

#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
  

Больше о привязке монтируется в документации.