Мой образ докера на основе alpine Linex ничего не может получить из сети. Так что команда "apk add xxx" действительна. Теперь моя идея — загрузить файл .apk и скопировать его в контейнер докера. Но как я могу установить файл .apk?
Как я могу установить файл .apk в alpine linux в автономном режиме?
Ответы (3)
Допустим, вы пытаетесь установить glibc в Alpine.
Загрузите пакеты в текущий каталог
wget "https://circle-artifacts.com/gh/andyshinn/alpine-pkg-glibc/6/artifacts/0/home/ubuntu/alpine-pkg-glibc/packages/x86_64/glibc-2.21-r2.apk"
wget "https://circle-artifacts.com/gh/andyshinn/alpine-pkg-glibc/6/artifacts/0/home/ubuntu/alpine-pkg-glibc/packages/x86_64/glibc-bin-2.21-r2.apk"
Затем используйте apk с флагом --allow-untrusted
apk add --allow-untrusted glibc-2.21-r2.apk glibc-bin-2.21-r2.apk
И завершите установку (нужно только в этом примере)
/usr/glibc/usr/bin/ldconfig /lib /usr/glibc/usr/lib
Если есть возможность запускать команды Docker из системы, подключенной к общедоступному Интернету, вы можете сделать это с помощью Docker, разделив образ на две части.
Первое изображение содержит только команды apk
, но не код приложения.
FROM alpine
RUN apk add ...
Создайте этот образ docker build -t me/alpine-base
, подключенный к сети.
Теперь вам нужно перенести этот образ в изолированную среду. Если возможно подключить некоторую систему к обеим сетям и запустить реестр Docker внутри среды, вы можете использовать docker push
для отправки образа в изолированную среду. В противном случае это один из немногих случаев, когда вам нужно docker save
: создать tar-файл образа, переместить этот файл в изолированную среду (через хост-бастион, на USB-ключ, ...) и docker load
его на целевая система.
Теперь у вас есть этот базовый образ в целевой системе, поэтому вы можете установить приложение поверх него, не вызывая apk
.
FROM me/alpine-base
WORKDIR /app
COPY . .
CMD ...
Этот подход будет работать для любого вида артефакта. Если у вас есть что-то вроде package.json
/requirements.txt
/Gemfile
/go.mod
приложения, в котором перечислены все зависимости библиотеки приложения, вы можете заранее выполнить шаг загрузки и установки, но вам нужно будет не забыть повторить его. и вручную переместите обновленный базовый образ, если эти зависимости когда-либо изменятся.
Следующие шаги меня устраивают:
Получите онлайн-машину Alpine и загрузите пакеты. Пример с пакетами zip и rsync:
- Update your system:
sudo apk update
- Скачать только эти пакеты:
apk fetch zip rsync
- Update your system:
Вы получите эти файлы (или, может быть, актуальную версию):
zip-3.0-r8.apk
rsync-3.1.3-r3.apk
Загрузите автономную машину Alpine.
Установите apk-пакеты:
sudo apk add --allow-untrusted zip-3.0-r8.apk sudo apk add --allow-untrusted rsync-3.1.3-r3.apk
Дополнительная информация: https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management