![](/img/trans.png)
[英]How to install Alpine Linux packages in the gliderlabs/alpine Docker image, when apk add fails?
[英]How can I install .apk file in alpine linux offline?
我的基于 alpine Linex 的 docker 图像无法从网络获取任何内容。 所以命令“apk add xxx”是有效的。 现在我的想法是下载 .apk 文件并将其复制到 docker 容器中。 但是我怎样才能安装.apk 文件呢?
假设您正在尝试在 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
接下来的步骤对我来说很好:
获取“在线”Alpine 机器并下载软件包。 示例是“zip”和“rsync”包:
sudo apk update
apk fetch zip rsync
您将获得这些文件(或者可能是实际版本):
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
如果可以从连接到公共 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
/ Gemfile
/ go.mod
之类的东西,它会列出所有应用程序的下载,但您可以提前安装库依赖项,如果这些依赖关系发生变化,需要记住重复它并手动移动更新的基础映像。
请注意,当您获取 apk 以下载所有依赖项时,标志 --recursive 是必需的,否则当您因缺少软件包而离线 go 时可能会收到错误消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.