在没有互联网的情况下安装Alpine Linux软件包(docker)

7
我正在尝试使用Alpine构建Docker镜像,并且只需要安装一些软件包(apk add),但是由于我们的开发环境不允许连接到互联网,所以不能通过互联网进行安装。 因此,我将apk文件复制到/temp目录中,并尝试从那里安装。就像文档添加本地软件包中所述。 但是,它仍然会尝试连接到互联网获取索引...我不希望这样。请问有解决方法吗?
FROM alpine:3.8
COPY ./apk/* /tmp/
RUN apk add --allow-untrusted --no-network --no-cache /tmp/ca-certificates-20171114-r3.apk /tmp/libcurl-7.61.1-r1.apk /tmp/libssh2-1.8.0-r3.apk /tmp/nghttp2-libs-1.32.0-r0.apk /tmp/curl-7.61.1-r1.apk

ENTRYPOINT ["/usr/bin/curl"]

(是的,这个镜像可以在DockerHub上获取,但我们需要自己构建它)
2个回答

10

是的,这是可能的。这是某种类型的黑客技巧 :) Alpine软件包管理器 (apk) 在安装软件包时 (apk add) 总是需要一个索引库来进行索引。但是可以提供一个空的仓库列表,并在安装命令中定义 (apk add --repositories-file=)。

Dockerfile 是:

FROM alpine:3.8
COPY ./apk/* /tmp/
RUN touch repo.list && apk add --repositories-file=repo.list --allow-untrusted --no-network --no-cache /tmp/ca-certificates-20171114-r3.apk /tmp/libcurl-7.61.1-r1.apk /tmp/libssh2-1.8.0-r3.apk /tmp/nghttp2-libs-1.32.0-r0.apk /tmp/curl-7.61.1-r1.apk

ENTRYPOINT ["/usr/bin/curl"]

然后我们得到:

$ docker build . --no-cache 
Sending build context to Docker daemon    663kB
Step 1/4 : FROM alpine:3.8
 ---> 11cd0b38bc3c
Step 2/4 : COPY ./apk/* /tmp/
 ---> 31248015db45
Step 3/4 : RUN touch repo.list && apk add --repositories-file=repo.list --allow-untrusted --no-network --no-cache /tmp/ca-certificates-20171114-r3.apk /tmp/libcurl-7.61.1-r1.apk /tmp/libssh2-1.8.0-r3.apk /tmp/nghttp2-libs-1.32.0-r0.apk /tmp/curl-7.61.1-r1.apk
 ---> Running in b8d214219e03
(1/5) Installing ca-certificates (20171114-r3)
(2/5) Installing nghttp2-libs (1.32.0-r0)
(3/5) Installing libssh2 (1.8.0-r3)
(4/5) Installing libcurl (7.61.1-r1)
(5/5) Installing curl (7.61.1-r1)
Executing busybox-1.28.4-r0.trigger
Executing ca-certificates-20171114-r3.trigger
OK: 6 MiB in 18 packages
Removing intermediate container b8d214219e03
 ---> 3e36700c3641
Step 4/4 : ENTRYPOINT ["/usr/bin/curl"]
 ---> Running in 32abd512c88e
Removing intermediate container 32abd512c88e
 ---> bd915c91c7ec
Successfully built bd915c91c7ec

3
你可以使用 apk add --repositories-file=/dev/null 命令来避免创建一个空文件。 - assembly_wizard
2
此外,如果您提供的任何软件包依赖于您提供的其他软件包,apk 将找出正确的安装顺序,因此您只需使用 *.apk,它将按正确的顺序全部安装。 - assembly_wizard

0
根据wiki.alpinelinux.org上的文档,您可以简单地使用apk add --allow-untrusted /path/to/file.apk,如果您想要多个软件包,则使用apk add --allow-untrusted /path/to/file.apk /path/to/file_2.apk

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