1

我基于 alpine Linex 的 docker 映像无法从网络获取任何内容。所以命令“apk add xxx”是有效的。现在我的想法是下载 .apk 文件并将其复制到 docker 容器中。但是如何安装 .apk 文件?

4

3 回答 3

1

假设您正在尝试在 Alpine 中安装 glibc

将包下载到当前目录

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"

然后,使用带有 --allow-untrusted 标志的 apk

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
于 2020-05-26T09:49:40.650 回答
1

接下来的步骤对我来说很好:

  1. 获取“在线”Alpine 机器并下载软件包。示例是“zip”和“rsync”包:

    • 更新您的系统: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

于 2021-07-21T07:16:31.613 回答
0

如果可以从连接到公共 Internet 的系统运行 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,你可以像这样提前运行下载Gemfilego.mod安装步骤,但你需要记住重复它并手动移动如果这些依赖关系发生变化,则更新基础映像。

于 2020-05-26T10:28:31.507 回答