Как я могу установить файл .apk в alpine linux в автономном режиме?

Мой образ докера на основе alpine Linex ничего не может получить из сети. Так что команда "apk add xxx" действительна. Теперь моя идея — загрузить файл .apk и скопировать его в контейнер докера. Но как я могу установить файл .apk?


person lai nan    schedule 26.05.2020    source источник


Ответы (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
person nischay goyal    schedule 26.05.2020
comment
Это полезно для меня! Большое спасибо. - person lai nan; 27.05.2020
comment
Что делать, если я хочу, чтобы этот пакет apk был установлен в определенном каталоге? - person Janshair Khan; 23.08.2020

Если есть возможность запускать команды 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 приложения, в котором перечислены все зависимости библиотеки приложения, вы можете заранее выполнить шаг загрузки и установки, но вам нужно будет не забыть повторить его. и вручную переместите обновленный базовый образ, если эти зависимости когда-либо изменятся.

person David Maze    schedule 26.05.2020

Следующие шаги меня устраивают:

  1. Получите онлайн-машину Alpine и загрузите пакеты. Пример с пакетами zip и rsync:

    • Update your system: sudo apk update
    • Скачать только эти пакеты: apk fetch zip rsync
  2. Вы получите эти файлы (или, может быть, актуальную версию):

    • zip-3.0-r8.apk
    • rsync-3.1.3-r3.apk
  3. Загрузите автономную машину Alpine.

  4. Установите 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

person fquinto    schedule 21.07.2021