Похоже, что сборка докеров не перезапишет файл, который ранее скопировал. У меня есть файл докеров с несколькими инструкциями копирования, и файлы, затронутые в более ранних директивах COPY, не перезаписываются более поздними.
Упрощенный пример (хотя это также происходит, если первая копия представляет собой весь каталог, в котором содержится файл в вопросе):
COPY docker/config/file1.yml $BASE/config/thatfile.yml
COPY docker/config/file2.yml $BASE/config/thatfile.yml
После сборки $ BASE / config / thatfile.yml будет содержать содержимое file1.yml. Есть ли способ заставить его содержать содержимое file2.yml?
Мой основной вариант использования здесь - это копирование всей папки с файлами конфигурации, а затем замена выбранных файлов конфигурации для конкретных сборок.
Непроверено:
COPY dir lol
RUN cp -a lol $BASE
Обновление. Я не могу понять поведение вашего исходного сообщения. Вы должны быть троллем, использовать другую версию или у вас есть docker-compose, который монтирует что-то поверх чего-то. ;);)
https://github.com/bor8/lolquadrat
git clone https://github.com/bor8/lolquadrat
cd lolquadrat/
docker build --no-cache .
Последний вывод:
Step 1/6 : FROM busybox:latest ---> 19485c79a9bb Step 2/6 : ARG BASE=/opt/hihi ---> Running in e4a01850931e Removing intermediate container e4a01850931e ---> 193009cc4df9 Step 3/6 : COPY docker/config/file1.yml $BASE/config/thatfile.yml ---> bea7783ade65 Step 4/6 : RUN echo 'first thatfile:' && cat ${BASE}/config/thatfile.yml ---> Running in 201e86de06bc first thatfile: file1content Removing intermediate container 201e86de06bc ---> ca7676a83a16 Step 5/6 : COPY docker/config/file2.yml $BASE/config/thatfile.yml ---> da5985cd90fb Step 6/6 : RUN echo 'second thatfile:' && cat ${BASE}/config/thatfile.yml ---> Running in f70153917070 second thatfile: file2content Removing intermediate container f70153917070 ---> 5a4b17a1e77e Successfully built 5a4b17a1e77e
В работающем контейнере также отображается file2content
. Чтобы проверить это, вы можете сделать CMD tail -f / dev / null
в последней строке вашего файла Docker, а затем использовать docker exec -it
. cat thatfile.yml
.
Я еще не полностью проверил, существует ли такое же поведение для папки (по сравнению с file1.yml
).