我正在写作容器特性我希望能够在和上安装包debian:latest
。为此,我愿意利用ubuntu:latest
alpine:latest
帕卡普特,一个纯 shell 跨操作系统解决方案。
首先,我需要能够下载脚本本身这就是变得棘手的地方。基础镜像几乎没有提供(没有curl
、wget
或telnet
),请参阅裸镜像上可用的包:
约束
壳
我正在寻找 POSIX 解决方案。
可用命令
以下是所有内容中缺少的内容(以 为前缀-
)和存在的内容(以 为前缀)。+
-curl
-wget
-openssl
-telnet
-git
-nc
-netcat
+awk
HTTPS
我要下载的文件是pacapt
托管在 GitHub 上的脚本,位于
问题
如何在没有 curl / wget 的情况下从 docker 容器镜像下载文件?
有关的:
答案1
您可以设置多阶段构建,并先将文件下载到一次性映像中,然后将其复制到目标映像中。文档中显示了一个示例多阶段构建. 所有这些都应该放在一个 Dockerfile 中:
FROM golang:1.16 AS builder
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html
COPY app.go ./
RUN CGO_ENABLED=0 go build -a -installsuffix cgo -o app .
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /go/src/github.com/alexellis/href-counter/app ./
CMD ["./app"]
一般语法是:
COPY --from=stage_or_image source_path_in_the_image target_path
它的工作方式与常规类似COPY
,只是源是指定的图像,而不是主机上的构建目录。您也可以指定独立的图像:
COPY --from=nginx:latest /etc/nginx/nginx.conf /nginx.conf
对于您的用例,您可以找到包含所需文件的图像并从中复制,或者先使用带有 curl/wget 的容器下载文件,然后复制它。