LINUX.ORG.RU

Docker обновление исходного образа.

 ,


0

1

Есть несколько образов, Dockerfile которых начинается на FROM ubuntu:14.04. Собственно вопрос. Предположим, в какой-то библиотеке нашли уязвимость. Есть ли вариант, без пересобирания образа из Dockerfile обновить «подложку» ubuntu:14.04, и обновлённые библиотеки/файлы оказались бы во всех образах, которые от неё наследовались.


FROM ubuntu:14.04_last
FROM ubuntu:14.04_updated
типа того?

anonymous ()

Это невозможно, если не ошибаюсь. Допустим ты сделал pull для ubuntu:latest, и чтобы изменения оказались в других образах, которые его используют, как ни крути придётся пересобирать, т.к. они зависят от старой версии, которая стала dangling.

Kilte ★★★★★ ()

Нет, без пересборки нельзя - у обновленного образа будет уже другой хэш

vrutkovs ★★ ()

Смотри,

Есть у тебя образ ubuntu:14.04, он состоит из слоёв A, B, C, где A, B, С - их хеши, каждый новый появляется при новой команде в Dockerfile. Создал ты свой образ, он стал состоять из слоёв A, B, C, D, E.

Обновил ты родительский образ - слои там стали A, B, F, но твой всё равно состоит из A, B, C, D, E. Поэтому нужно пересобирать.

Shtsh ★★★★ ()

Я тебе по секрету скажу, что когда прогрессивная общественность во всю обмазывалась UnionFS и всевозможными namespaces о безопасности вообще никто не думал («Дядя Торвальдс все уже сделал за нас»). И даже сейчас сидя на ubuntu:last тебе никто не гарантирует, что ты не притащил себе парочку CVE.

Когда я был молодой, красивый и нравился женщинам это называлось broken by design, сейчас хипстота утверждает, что вы же внутри контейнера - таки что вы паритесь.

BigAlex ★★★ ()
Последнее исправление: BigAlex (всего исправлений: 2)
Ответ на: комментарий от BigAlex

А сейчас ты просто старый брюзга. Плохо быть тобой.

anonymous ()
Ответ на: комментарий от Shtsh

Есть у тебя образ ubuntu:14.04, он состоит из слоёв A, B, C, где A, B, С - их хеши, каждый новый появляется при новой команде в Dockerfile. Создал ты свой образ, он стал состоять из слоёв A, B, C, D, E.

Ну так принудительно внести изменения в первоначальных слоях внутри A,B,C, так сказать на свой страх и риск. То есть если в следующем слое D,E файлы из слоя A,B,C, пусть даже и обновленные, были перекрыты, то пусть они из слоя D,E и останутся в результате, а все файлы, которые были обновлены в слоях A,B,C если они не изменялись на уровнях D,E пусть будут в окончательном варианте. Я хочу не создать новый слой при обновлении, хочу подменить на обновленные некоторые файлы из слоя A,B,C.

Viper ()
Последнее исправление: Viper (всего исправлений: 1)
Ответ на: комментарий от anonymous

FROM ubuntu:14.04_last
FROM ubuntu:14.04_updated

Подложка просто будет иметь обновления, после сборки образа, этот образ больше не будет обновляться и найденные уязвимости будут оставаться во всех потомках, пока заново не пересоберёшь потомков.

Viper ()
Ответ на: комментарий от Viper

Не думаю, что это возможно сделать малой кровью без переписывания куска докера (или создания нового приложения, базируясь на логике докера)

Слой - не просто набор файлов, это именно дифф от предыдущего. Плюс A, B, C, etc - это хеши от содержимого. Плюс в логике докера каждый следующий слой хранит ссылку на предыдущий, если я правильно понял по https://github.com/docker/docker/blob/master/layer/layer.go

То есть нужно как-то на низком уровне ковырять метаданные и править цепочки, не забывая про правку хешей. Выглядит как задача не на один день и по сути реализовать она будет пересборку образов.

Shtsh ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.