169 похожих чатов

Всем привет. Чет у меня ступор. md5 локального файла один,

внутри образа другой. Не могу сообразить как такое случается. Накиньте идей

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

24 ответов

76 просмотров

Во первых простыни это фу. Во вторых запускай команду одинаково md5 -b ./file

Dmitry-Sergeev 🇺🇦 Автор вопроса
Alex Gluck
Во первых простыни это фу. Во вторых запускай ком...

то что файлы разные видно по содержимому, ну и 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'и

Dmitry Sergeev 🇺🇦
то что файлы разные видно по содержимому, ну и md5...

Тогда билд команда должна скипать кеш ключём, могут быть ещё варианты

Dmitry-Sergeev 🇺🇦 Автор вопроса

принудительно собрать без кеша поможет, но проблема в том что должно работать без проблем и без сброса кеша. 1) видно по логам как он НЕ берет из кеша 2) я уже добавлял в ранние слои RUN echo 1/2/3/4/5/etc чтобы убедится в этом

Dmitry-Sergeev 🇺🇦 Автор вопроса

UPDATE проблема воспроизводится только при запуске в контексте github runner'а. КАкая-то подозрительная магия 🤔 локально на этом раннере руками проверил, всё ок. Меняю index.html, он меняется в образе

Dmitry-Sergeev 🇺🇦 Автор вопроса
Alex Gluck
Попробуй Билду 😉

мы уже обсуждали какое оно говно =)

Dmitry-Sergeev 🇺🇦 Автор вопроса
Alex Gluck
Не то что докер, да?)

да тут походу не в нем дело

Dmitry-Sergeev 🇺🇦 Автор вопроса

я хз что это. Это крайне странно. Выглядит оно примерно так в пайплайне: - 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 в пайплайне для дебага уже добавил

Dmitry-Sergeev 🇺🇦 Автор вопроса
Dmitry Sergeev 🇺🇦
я хз что это. Это крайне странно. Выглядит оно п...

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 еще норм

Дальше не читал пока. Про шаблон-переменную вспомнили?

Dmitry-Sergeev 🇺🇦 Автор вопроса
Alex Gluck
Не то что докер, да?)

проблема была в buildkit https://t.me/ru_devops/233542, в докере оказалось что как раз всё окей. Так что мимо =)

Dmitry Sergeev 🇺🇦
проблема была в buildkit https://t.me/ru_devops/23...

действительно, buildkit это не в докере. Его правда больше нигде нет, но ладно

Dmitry-Sergeev 🇺🇦 Автор вопроса
Alex Gluck
действительно, buildkit это не в докере. Его правд...

в плане? Можно же отдельно buildkit взять и им собирать

Dmitry-Sergeev 🇺🇦 Автор вопроса

а у тебя compose и buildkit не стоит что ли? ты не ставил как рекомендует сам docker? туплю.

Dmitry-Sergeev 🇺🇦 Автор вопроса
Dmitry-Sergeev 🇺🇦 Автор вопроса
Andrey Mavlyanov
а у тебя compose и buildkit не стоит что ли? ты не...

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

Dmitry-Sergeev 🇺🇦 Автор вопроса
Andrey Mavlyanov
да я ж написал - туплю.

да я на всякий случай, мб что-то упускаю

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта