docker - 没有互联网的 Alpine Linux 安装包(docker)
问题描述
我正在尝试使用 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 上可用,但我们需要自己构建)
解决方案
对的,这是可能的。这是某种 hack :) 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
推荐阅读
- scala - 关于 scala 语句 case List(a) => true 中大小写匹配的问题
- powerbi - 删除表后无法应用更改
- javascript - 将变量分配给函数 - Jquery
- webpack - 如何配置 Quasar 以仅转换、提供和构建特定的 ES6 JavaScript 文件?
- random - 在 Anylogic 中,如何从项目列表中随机选择
- amazon-web-services - GoogleCloud 中的 AWS Athena 等效项
- python - 使用其他 pandas 列来指示 Series.contains 中的正则表达式
- python - 使用 Tensorflow_hub 和 Universal-sentence-encoder 时的困难
- java - 覆盖 Hibernate Envers 的审计功能
- c# - 在 Unity 中移动相机的脚本中重置鼠标的位置