如何在没有 curl / wget 的情况下从 docker 容器镜像下载文件?

如何在没有 curl / wget 的情况下从 docker 容器镜像下载文件?

我正在写作容器特性我希望能够在和上安装包debian:latest。为此,我愿意利用ubuntu:latestalpine:latest帕卡普特,一个纯 shell 跨操作系统解决方案。

首先,我需要能够下载脚本本身这就是变得棘手的地方。基础镜像几乎没有提供(没有curlwgettelnet),请参阅裸镜像上可用的包:

约束

我正在寻找 POSIX 解决方案。

可用命令

以下是所有内容中缺少的内容(以 为前缀-)和存在的内容(以 为前缀)。+

-curl
-wget
-openssl
-telnet
-git
-nc
-netcat
+awk

HTTPS

我要下载的文件是pacapt托管在 GitHub 上的脚本,位于

https://raw.githubusercontent.com/icy/pacapt/ng/pacapt

问题

如何在没有 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 的容器下载文件,然后复制它。

相关内容