«уже существует и не является пустым каталогом» для пустого каталога с использованием Docker - PullRequest
1 голос
/ 22 марта 2019

Я работал над образом Docker, который извлекает необходимые файлы из репозитория github, а затем строит сам.Он предназначен для простого обновления себя из github каждый раз, но для его проверки я удаляю всю папку репозитория github при каждом запуске.

После удаления папки я начал получать

fatal: целевой путь 'Project-4' уже существует и не является пустым каталогом.

Содержимое файла Docker (файл, который создает образ):

FROM python:3.7
WORKDIR /usr/src/app
CMD ["sh", "-c", "git clone https://github.com/nathanhtaylor/Project-4.git && cd ./Project-4 && pip install -r requirements.txt && python server.py"]

На этой машине нет каталога Project-4.Эта ошибка происходит независимо от того, из какой папки заканчивается изображение.Запуск git clone http://github.com/nathanhtaylor/Project-4.git вручную работает нормально.

1 Ответ

0 голосов
/ 22 марта 2019

В построении образа Docker есть недостаток.Предполагается, что образы Docker неизменны, т. Е. После их создания вы сможете запускать его только с использованием встроенного исполняемого файла, а не изменять его.Образы Docker имеют и могут быть версионированы так же, как ваши исходные коды.

В вашем примере вы пытаетесь выполнить процесс сборки, получая зависимости и выполнение в CMD, что противоречит принципам, как и почему контейнерынеобходимо использовать и проблему, которую они пытаются решить.

Я предлагаю прочитать эту статью, чтобы понять, почему требуется неизменность

https://medium.com/sroze/why-i-think-we-should-all-use-immutable-docker-images-9f4fdcb5212f

Что касается вашего Dockerfile, я бы предложилвы изменяете его, чтобы получить репозиторий и требования git как часть шагов сборки docker и вне CMD, и сохраняете там только исполняемый файл.

В указанном вами сценарии, в идеале, ваш CI (непрерывная интеграция) или любой другой конвейердолжен иметь этап для перестройки образа Docker с нуля, если в вашем удаленном git-репозитории есть какие-либо изменения, и соответственно измените его версию и отметьте его как последний тег.

Кроме того, эта ссылка имеет хороший способ построенияобразы докеров с использованием удаленных репозиториев git, которые могут быть полезны в вашем сценарии, если выВы не хотите использовать своего рода конвейер CI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...