У меня есть Dockerfile
для создания образа Docker, который основан на Alpine Linux. Теперь мне нужно установить пакет как часть этого Dockerfile
.
В настоящее время у меня есть:
RUN apk update && \
apk upgrade && \
apk add git
По-видимому, это плохая идея, так как результат является недетерминированным. Вместо этого, это зависит от момента, когда я создаю образ, какая версия git
устанавливается.
Как правильно это сделать?
Я думаю, что я должен сказать updated
, upgrade
и add
какие версии использовать, но как мне это сделать?
Я видел, что это apk
поддерживает закрепление репозиториев, но это не то, что я хочу (по крайней мере, я так думаю), потому что я не хочу закреплять репозиторий, а пакет.
Другими словами: если git
бы можно было установить через npm
, я бы смог запустить:
npm install git@1.9.2
(или любую другую версию, которую я хочу иметь). Что эквивалентно этому для Alpine Linux?
источник
apk add ansible~=2.4.1
смыслу>=2.4.1 <2.5.0
. Проверьте jubianchi.github.io/semver-check, чтобы проверить свои собственные диапазоны.В настоящее время нет возможности установить произвольные более старые версии пакета из официальных репозиториев в Alpine Linux. Лучшее, что вы можете достичь, это использовать репозитории предыдущих выпусков:
источник
Потому что я использовал
testing
репо. Я закончил тем, что создал свою собственную копию. шаги:Перейти к деталям пакета. Пример:
https://pkgs.alpinelinux.org/package/edge/testing/armhf/watchman
Нажмите на коммит, нажмите на ссылку файла APKBUILD и «Журнал» в меню, чтобы получить журнал фиксации файла APKBUILD. Затем выберите коммит для вашего файла APKBUILD и загрузите его. Пример:
https://git.alpinelinux.org/cgit/aports/tree/testing/watchman/APKBUILD?id=63f5e7d295659a855709901ce22a3e5f40fce455
Установите инструменты сборки:
Вы должны быть не
root
пользователем, поэтому создайтеpackager
пользователя с паролем:Затем создайте его
packager
в том же каталоге, что и файл APKBUILD:Возможно, вам придется выяснить ошибки и установить зависимости. В моем примере мне нужно было сделать это на моем существующем образе Docker как
root
:После успешной сборки as
packager
установите его какroot
:Не уверен, как удалить
--allow-untrusted
часть, но шаги сработали для меня.источник