Я думаю, что хочу, чтобы Docker RUN выполнял что-то, что, как я знаю, выйдет из строя, но затем использовал ремонт, чтобы исправить это, т.е.
RUN dpkg -i wkhtmltox_0.12.6-1.focal_arm64.deb
RUN apt-get update
RUN apt fix-broken install
Похоже, что apt
распознает, что wkhtmltox
не удалось установить из-за отсутствия пакетов, и затем может установить их все. ...Я думаю.
В любом случае, даже попытка сделать это означает, что сборка Docker будет продолжена при неправильном коде выхода.
Я могу это сделать?
Вот решение:
RUN dpkg -i wkhtmltox_0.12.6-1.focal_arm64.deb || true
RUN apt-get update || true
RUN apt fix-broken install || true
Объединение их в один оператор RUN
может иметь смысл, поскольку затем вы можете просто объединить их с ;
, который в основном скрывает код выхода из всех команд, кроме последней из Docker.
Вы можете действительно захотеть несколько улучшений в дополнение к тому, чтобы просто заставить это работать!
dpkg
успешно доставлен в посылкеapt-get
вместо apt
, чтобы избежать предупреждения стабильного интерфейсаapt
команды в одном блоке с clean
в конце, чтобы уменьшить размер контейнера# NOTE dpkg -i exits nonzero due to missing dependencies
RUN dpkg -i wkhtmltox_0.12.6-1.focal_arm64.deb ; \
dpkg -l | grep wkhtmltox
RUN apt-get update && \
apt-get -f install && \
apt-get clean
Ух ты. Спасибо. Я сохраню официальный ответ как Антонио, потому что я думаю, что это более чистый ответ на исходный вопрос.
s1 || s2
означает бежатьs1
, а если это не удается, бежатьs2
.