Запустить контейнер из промежуточного слоя образа

Получаю последнюю версию образа:

docker pull postgres:alpine

Получаю такой лог:

alpine: Pulling from library/postgres
a0d0a0d46f8b: Already exists 
5034a66b99e6: Pull complete 
82e9eb77798b: Pull complete 
314b9347faf5: Pull complete 
2625be9fae82: Pull complete 
5ec8358e2a99: Pull complete 
2e9ccfc29d86: Pull complete 
2a4d94e5dde0: Pull complete

Как мне запустить контейнер на основе слоя a0d0a0d46f8b?

Что-то похожее на docker run -it --rm a0d0a0d46f8b bash. Но так это не работает.

PS. Вариант получить версию по тегу не предлагать, так как на самом деле мне нужно решение для закрытого enterprise образа, в котором нет тегов, а тут postgres используется только в качестве примера.


Ответы (1 шт):

Автор решения: Exploding Kitten

Насколько я знаю это только возможно для образов, которые были собраны вами на текущей машине. Как только вы сделали push/pull это уже не возможно.

Образ это набор метаданных (хеш образа и является хешем, этих метаданных), которые включают в себя список слоев. Стои являются неизменяемыми (это просто некая структура файлов с хешем) и как раз они и являются общими у нескольких образов. Например, если посмотреть на несколько образов основанных на одной версии alpine, то можно увидеть что первый свой у них всех одинаковый.

Когда вы создаете образ локально, то для некоторых слоев докер создает и образ, это необходимо для того, чтобы работал кэш (если вы используете дефолтный билдер, а не buildkit), чтобы при каждом билде не выполнять ненужную работу (а взять уже готовый образ и немного его изменить). Поэтому вы можете легко запустить такой образ, получив его хеш из логов или docker image inspect или docker history.

Но как только вы сделаете push/pull вам не нужен кеш и не нужна промежуточная информация, вы делаете push/pull только последнего образа и его слоев, игнорируя все промежуточные. Поэтому когда вы вызовете docker image inspect/docker history вы не увидите хешей образов, а только набор слоев, а их запускать нельзя.

Статья про Image IDs.

→ Ссылка