внутри образа другой. Не могу сообразить как такое случается. Накиньте идей
UPDATE: оказалось что это баг(фича?) buildkit, описание как воспроизвести здесь: https://t.me/ru_devops/233542. Без buildkit всё в порядке. Решить можно отключением buildkit либо принудительной установкой даты модификации файлов перед сборкой образа (find ./build/web-mobile/ -type f -exec touch {} \;)
dockerfile:
FROM docker.io/nginx:1.25.1-alpine3.17-slim
COPY ./build/web-mobile/ /usr/share/nginx/html
WORKDIR /usr/share/nginx/html
RUN md5sum ./index.html; cat index.html | grep main
ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"]
debug:
ls -la build/web-mobile/
cat build/web-mobile/index.html | grep main
md5sum build/web-mobile/index.html
docker build -t test -f docker/web/Dockerfile .
Результат:
+ ls -la build/web-mobile/
total 1228
drwxr-xr-x 4 github github 4096 Jul 21 17:36 .
drwxr-xr-x 3 github github 4096 Jul 21 17:35 ..
drwxr-xr-x 5 github github 4096 Jul 21 17:37 assets
-rw-r--r-- 1 github github 1199071 Jul 20 13:54 cocos2d-js-min.06bfc.js
-rw-r--r-- 1 github github 1150 Jul 27 2021 favicon.8de18.ico
-rw-r--r-- 1 github github 2995 Jul 27 2021 index.html
-rw-r--r-- 1 github github 5000 Jul 27 2021 main.2508e.js
-rw-r--r-- 1 github github 13709 Jul 27 2021 splash.85cfd.png
drwxr-xr-x 2 github github 4096 Jul 21 17:36 src
-rw-r--r-- 1 github github 2327 Jul 27 2021 style-desktop.81ede.css
+ cat build/web-mobile/index.html
+ grep main
-rw-r--r-- 1 github github 2565 Jul 27 2021 style-mobile.25fc5.css
<script src="main.2508e.js" charset="utf-8"></script>
+ md5sum build/web-mobile/index.html
12cb307798952b2253606a9535756a35 build/web-mobile/index.html
+ docker build -t test -f docker/web/Dockerfile .
...
#6 [2/4] COPY ./build/web-mobile/ /usr/share/nginx/html
#6 DONE 0.1s
#7 [3/4] WORKDIR /usr/share/nginx/html
#7 DONE 0.1s
#8 [4/4] RUN md5sum ./index.html; cat index.html | grep main
#8 0.223 3b5d93d3461358225eb70a4b93da3fa4 ./index.html
#8 0.224 <script src="main.45619.js" charset="utf-8"></script>
#8 DONE 0.3smain.45619.js" charset="utf-8"></script>
#8 DONE 0.3s
Обратиме внимание что в моменте
+ md5sum build/web-mobile/index.html сумма равна 12cb307798952b2253606a9535756a35
затем этот же файл который тупо копируется в образ по COPY ./build/web-mobile/ /usr/share/nginx/html
но внутри обараза hash сумма другая: 3b5d93d3461358225eb70a4b93da3fa4
Сброс кеша докера ( docker system prune -a) поможет, будет новый файл, но на следующий билд, будет опять тоже самое (там будет файл от предыдущего билда). Как будто переиспользуется слой только для файла index.html, что за дичь? Видно ведь как слой заново собирается, как будто в контекст билда попадает что-то другое
Server: Docker Engine - Community
Engine:
Version: 24.0.4
API version: 1.43 (minimum version 1.12)
Go version: go1.20.5
Git commit: 4ffc614
Built: Fri Jul 7 14:50:57 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.21
GitCommit: 3dce8eb055cbb6872793272b4f20ed16117344f8
runc:
Version: 1.1.7
GitCommit: v1.1.7-0-g860f061
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Во первых простыни это фу. Во вторых запускай команду одинаково md5 -b ./file
то что файлы разные видно по содержимому, ну и md5sum достаточно отличаются hash суммы и содержимое 1) <script src="main.2508e.js" charset="utf-8"></script> 2) <script src="main.45619.js" charset="utf-8"></script> поэтому запускать md5 -b не вижу смысла, оно точно также покажет разные hash'и
Тогда билд команда должна скипать кеш ключём, могут быть ещё варианты
принудительно собрать без кеша поможет, но проблема в том что должно работать без проблем и без сброса кеша. 1) видно по логам как он НЕ берет из кеша 2) я уже добавлял в ранние слои RUN echo 1/2/3/4/5/etc чтобы убедится в этом
UPDATE проблема воспроизводится только при запуске в контексте github runner'а. КАкая-то подозрительная магия 🤔 локально на этом раннере руками проверил, всё ок. Меняю index.html, он меняется в образе
мы уже обсуждали какое оно говно =)
Не то что докер, да?)
да тут походу не в нем дело
я хз что это. Это крайне странно. Выглядит оно примерно так в пайплайне: - name: Download build artifact uses: actions/download-artifact@main with: name: build-artifact - name: unpack build assets cache run: | tar -xf ./build.tar.gz - name: build images run: | set -x ls -la build/web-mobile/ cat build/web-mobile/index.html | grep main md5sum build/web-mobile/index.html docker build -t test -f docker/web/Dockerfile . Воспроизводится только в раннере gtihub'а, в jenkins и вручную всё норм Забавно что добавил find ./build/web-mobile/ -type f -exec touch {} \; перед запуском docker build ... и это помогло 🤷 Чё ваще Разумеется всякие md5sum,cat,test в пайплайне для дебага уже добавил
UPDATE. Разобрался в чем проблема Резюмируя: это buildkit виноват Смотрите $ echo "#1" > ./build/web-mobile/index.html $ touch -t 202107271219 ./build/web-mobile/index.html $ touch -a ./build/web-mobile/index.html $ stat ./build/web-mobile/index.html File: ./build/web-mobile/index.html Size: 3 Blocks: 8 IO Block: 4096 regular file Device: 901h/2305d Inode: 3932250 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1203/ github) Gid: ( 1203/ github) Access: 2023-07-21 18:39:15.018148314 +0300 Modify: 2021-07-27 12:19:00.000000000 +0300 Change: 2023-07-21 18:39:15.018148314 +0300 Birth: - Дату модификации выставляю на 2021 (заметил что при сборке в раннере, когда архив прилетает из macos раннера, именно у index.html файла после распаковки установлена 2021-07-27 дата модификации, а так как touch помог, решил поразбираться с этим) Dockerfile такой: COPY ./build/web-mobile/ /usr/share/nginx/html WORKDIR /usr/share/nginx/html RUN md5sum ./index.html; cat index.html ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"] Выполняем первую сборку $ docker build -t test -f docker/web/Dockerfile . ... #8 [4/4] RUN md5sum ./index.html; cat index.html #8 0.215 772bec392e4610d7a741c7dc75189c61 ./index.html #8 0.216 #1 #8 DONE 0.3s Видим "#1" в файле. Все верно Теперь меняем файл, и дату модификации выставляем такую же $ echo "#3" > ./build/web-mobile/index.html $ touch -t 202107271219 ./build/web-mobile/index.html $ touch -a ./build/web-mobile/index.html Также принудительно обновляем слой в Dockerfile, добавляем echo 1: RUN echo 1; md5sum ./index.html; cat index.html Собираем: $ docker build -t test -f docker/web/Dockerfile . .. #6 [2/4] COPY ./build/web-mobile/ /usr/share/nginx/html #6 CACHED #7 [3/4] WORKDIR /usr/share/nginx/html #7 CACHED #8 [4/4] RUN echo 1; md5sum ./index.html; cat index.html #8 0.210 1 #8 0.210 772bec392e4610d7a741c7dc75189c61 ./index.html #8 0.210 #1 #8 DONE 0.3s Файл в образе остается тот же "#1", а должен быть "#3", поскольку мы обновили слой, мы четко видимо что он выполнился, также видно что слой с COPY взят из кеша. Это явно дичь Ну и самое забавное, build kit отрубаем, и всё становится норм $ export DOCKER_BUILDKIT=0 $ docker build -t test -f docker/web/Dockerfile . ... Step 4/5 : RUN echo 1; md5sum ./index.html; cat index.html ---> Running in c0469b9268d4 1 5a10afc5697bae7f8d2fde9d5d2859ba ./index.html #3 А в сборщике докера всё окей, без этого говна. Он честно hash считает файлов которые через COPY подаются. Вывод buildkit говно. А вы говорите от докера уходить, kaniko даты модификации кривые выставляет в файлах, buildkit hash'ы не сравнивает, buildah глючный и требует плясок с бубнами чтобы его завести. Как же от докера уходить, когда все остальные багованные. Ну bazel еще норм
Дальше не читал пока. Про шаблон-переменную вспомнили?
проблема была в buildkit https://t.me/ru_devops/233542, в докере оказалось что как раз всё окей. Так что мимо =)
действительно, buildkit это не в докере. Его правда больше нигде нет, но ладно
в плане? Можно же отдельно buildkit взять и им собирать
ага, там же не код от докера
https://github.com/moby/buildkit
а какая это версия docker? и какая docker buildx?
а у тебя compose и buildkit не стоит что ли? ты не ставил как рекомендует сам docker? туплю.
Не очень понимаю вопроса
да я ж написал - туплю.
ii docker-buildx-plugin 1.11.1-1~ubuntu.20.04~focal ii docker-ce 5:24.0.4-1~ubuntu.20.04~focal ii docker-ce-cli 5:24.0.4-1~ubuntu.20.04~focal $ apt-cache policy docker-buildx-plugin docker-buildx-plugin: Installed: 0.11.1-1~ubuntu.20.04~focal Candidate: 0.11.2-1~ubuntu.20.04~focal Version table: 0.11.2-1~ubuntu.20.04~focal 500 500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages *** 0.11.1-1~ubuntu.20.04~focal 500 500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages 100 /var/lib/dpkg/status
да я на всякий случай, мб что-то упускаю
Обсуждают сегодня