如何在离线的Alpine Linux中安装.apk文件?

7
我的Docker镜像是基于Alpine Linux的,但它无法从网络中获取任何东西。因此,命令“apk add xxx”是有效的。现在我的想法是下载.apk文件并将其复制到Docker容器中。但我该如何安装该.apk文件?
4个回答

5

以下步骤适用于我:

  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


5
假设您正在尝试在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

这对我很有用!非常感谢。 - lai nan
如果我想要将该apk包安装到特定目录中怎么办? - Janshair Khan

0
请注意,在获取您的apk以下载所有依赖项时,--recursive标志是必需的,否则当您离线时可能会因缺少软件包而出现错误。
  1. sudo apk update
  2. sudo apk fetch --recursive packageName
  3. 将文件传输到离线主机
  4. sudo apk add --allow-untrusted <dependency.apk>
  5. sudo apk add --allow-untrusted <package.apk>

-1
如果可以从连接到公共互联网的系统上运行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这样列出所有应用程序库依赖项的文件,您可以像这样提前运行下载和安装步骤,但是如果这些依赖关系发生更改,您需要记住重复此操作并手动移动更新的基础镜像。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接