Как установить .apk файл в alpine linux offline? - PullRequest
1 голос
/ 26 мая 2020

Мой docker образ на основе alpine Linex ничего не может получить из сети. Значит, команда «apk add xxx» действительна. Теперь моя идея - загрузить файл .apk и скопировать его в контейнер docker. А как установить файл .apk?

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Допустим, вы пытаетесь установить glib c в 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

И завершите sh установку (требуется только в этом примере)

/usr/glibc/usr/bin/ldconfig /lib /usr/glibc/usr/lib
0 голосов
/ 26 мая 2020

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

...