Мне кажется, я знаю, что происходит. Вот Dockerfile, который я использовал, чтобы выяснить, что происходит (скопировано сверху):
FROM jenkins/jenkins:lts
RUN ls -l /var/jenkins_home/; touch /var/jenkins_home/isthisworking; echo "================================"; ls -l /var/jenkins_home;
Как уже упоминалось, с этим файлом во время сборки я бы увидел файл isthisworking
, но когда я запускаю контейнер, этого файла больше нет.
Итак, я зашел на страницу jenkins / jenkins: lts github и посмотрел их Dockerfile. Я видел это в строке 26:
# Jenkins home directory is a volume, so configuration and build history
# can be persisted and survive image upgrades
VOLUME $JENKINS_HOME
Здесь $JENKINS_HOME
равно /var/jenkins_home/
. Поэтому, как нуб Docker, я спросил себя, что такое VOLUME
(я знаю, что это из командной строки, но не внутри Dockerfile)? При поиске в Google я нашел это и это , что в основном говорит:
Команда docker run инициализирует вновь созданный том любым
данные, которые существуют в указанном месте в базовом изображении.
Так как это местоположение является ОБЪЕМОМ докера в этой точке в Dockerfile, независимо от того, что и как файлы копируются в него, во время выполнения контейнера это местоположение будет повторно инициализировано так, как его «определил» базовый образ.
Чтобы файл оставался при запуске контейнера, внесите изменения / дополнения в каталог, прежде чем сделать его ОБЪЕМОМ.