Докер-дайджест должен быть неизменным, но получать разные этапы сборки - PullRequest
0 голосов
/ 11 апреля 2019

В январе я построил версию своего приложения, используя 'FROM node: 10.12.0'.

Журналы процесса сборки Semaphore показывают это:

d8268e1e433b: Pull complete 
Digest: sha256:00a7fb3df8e94ed24f42c2920f132f06e92ea5ed69b1c5e53c4bb3d20e85a3e2
Status: Downloaded newer image for node:10.12.0
 ---> a2b9536415c2
Step 2/11 : RUN apt-get update
 ---> Running in f9bd6b252e7f
Get:1 http://security.debian.org jessie/updates InRelease [44.9 kB]
Ign http://deb.debian.org jessie InRelease
Get:2 http://deb.debian.org jessie-updates InRelease [145 kB]
Get:3 http://security.debian.org jessie/updates/main amd64 Packages [790 kB]
Get:4 http://deb.debian.org jessie Release.gpg [2420 B]
Get:5 http://deb.debian.org jessie-updates/main amd64 Packages [23.0 kB]
Get:6 http://deb.debian.org jessie Release [148 kB]
Get:7 http://deb.debian.org jessie/main amd64 Packages [9098 kB]
Fetched 10.3 MB in 2s (3476 kB/s)
Reading package lists...

Только что я попыталсяпостроить новую сборку.Я не трогал эти файлы сборки и не собирался с января.Я думал, что все должно работать.Но я получил это вместо:

d8268e1e433b: Pull complete 
Digest: sha256:00a7fb3df8e94ed24f42c2920f132f06e92ea5ed69b1c5e53c4bb3d20e85a3e2
Status: Downloaded newer image for node:10.12.0
 ---> a2b9536415c2
Step 2/11 : RUN apt-get update
 ---> Running in e903db31c4a6
Get:1 http://security.debian.org jessie/updates InRelease [44.9 kB]
Ign http://deb.debian.org jessie InRelease
Get:2 http://deb.debian.org jessie-updates InRelease [7340 B]
Get:3 http://deb.debian.org jessie Release.gpg [2420 B]
Get:4 http://deb.debian.org jessie Release [148 kB]
Get:5 http://security.debian.org jessie/updates/main amd64 Packages [825 kB]
Get:6 http://deb.debian.org jessie/main amd64 Packages [9098 kB]
Fetched 10.1 MB in 4s (2509 kB/s)
W: Failed to fetch http://deb.debian.org/debian/dists/jessie-updates/InRelease  Unable to find expected entry 'main/binary-amd64/Packages' in Release file (Wrong sources.list entry or malformed file)

E: Some index files failed to download. They have been ignored, or old ones used instead.
The command '/bin/sh -c apt-get update' returned a non-zero code: 100

Итак, я узнал о Docker Digests.Должен иметь возможность иметь исключительно неизменные сборки с использованием дайджестов.Но ... дайджесты этих двух сборок одинаковы!

Правильно ли я считаю, что использование дайджеста в выражении 'FROM' не помогло бы мне?

Как могли эти дваразные сборки имеют один и тот же дайджест?

1 Ответ

1 голос
/ 11 апреля 2019

Вы правы, что изображение, которое вы строите поверх, такое же, как и раньше, потому что дайджесты совпадают. Проблема заключается в том, что последующие инструкции в вашем Dockerfile не всегда будут выполняться одинаково. В этом случае, когда вы звоните apt-get update, вы обращаетесь к удаленным репозиториям apt. Я не очень разбираюсь в этом процессе, но в основном кажется, что было сделано какое-то обновление, нарушающее совместимость с этим образом. Каждый раз, когда у вас есть такие удаленные зависимости (вызовы apt-get, загрузка файлов и т. Д.), Они могут измениться или стать недоступными, что приведет к сбою сборки, даже если базовый образ будет таким же.

Например, если у меня есть этот Dockerfile

    FROM ubuntu:latest
    RUN curl http://some.url --output some.file

Каждый раз, когда я запускаю сборку, если у меня нет кэшированного слоя, http://some.url должен быть доступен, или сборка не будет выполнена, даже если базовый образ Ubuntu такой же.

...