Я скопировал файл в образ докера с помощью:
COPY dbconfig.xml /var/app/dbconfig.xml
После этого я попытался заменить некоторые значения в файле на:
RUN sed -i "s/PASSWD/$dbpasswd/" /var/app/dbconfig.xml
Обратите внимание, что $ dbpasswordявляется переменной ENV.
Когда я проверяю содержимое config.xml, запустив контейнер с этим образом и запустив в нем bash, в dbconfig.xml ничего не изменилось.
Теперь я думаю, что неправильно понимаю некоторые основы образов докеров ..
Я даже тестировал, чтобы создать простой файл:
RUN echo "test" > newfile.txt
, который, кажется, удаляется после вызова ... Я знаю, что каждый RUN оператор создает новый слой , и после оператора он удаляется (?).
Я в замешательстве.Почему что-то вроде установки программного обеспечения с
RUN apt-get install -y some-package
не удаляется, а создание простого файла действительно удаляется?
Итак ... как я могу изменить файлы внутри образов докера в image-наращивание времени?
Dockerfile :
FROM dchevell/jira-software:8.0
COPY dbconfig.xml /var/atlassian/application-data/jira/dbconfig.xml
WORKDIR /var/atlassian/application-data/jira
# set default password to admin
ENV dbpasswd=admin
RUN sed -i "s/PASSWD/$dbpasswd/" dbconfig.xml \
&& cat dbconfig.xml
RUN echo "test" > newfile.txt
dbconfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<jira-database-config>
<name>defaultDS</name>
<delegator-name>default</delegator-name>
<database-type>postgres72</database-type>
<schema-name>public</schema-name>
<jdbc-datasource>
<url>jdbc:postgresql://docker-postgres:5432/jiradb</url>
<driver-class>org.postgresql.Driver</driver-class>
<username>atlasdb</username>
<password>PASSWD</password>
<pool-test-while-idle>true</pool-test-while-idle>
</jdbc-datasource>
</jira-database-config>
Обновление 1
Смущает, что когда я КОПИРУЮ что-то в папке WORKDIR, она сохраняется, но когда я пытаюсь потом изменить ее с помощью SED, эти изменения не сохраняются!Я думаю, что на заднем плане происходит какое-то очень темное волшебство .. Может быть, я пытаюсь связать меня с моим предварительно сконфигурированным dbconfig.xml в docker-compose и посмотреть, поможет ли это ..
Обновление 2
Из документации Docker :
Изменение тома из Dockerfile: если какие-либо шаги сборки изменяют данные внутри тома после его объявления,эти изменения будут отменены.
Я полностью пропустил это!Спасибо Дэвиду за указание на меня :). Поэтому создание и запись файлов работает, как и ожидалось, но будьте осторожны с каталогами VOLUME.RUN заявления не работают здесь.Поэтому для решения этой проблемы лучше всего подключить файл к этому тому.