docker - Dockerfile 映像构建:Dockerfile 中的“RUN wget”导致部分文件下载,但构建完成且没有错误
问题描述
如标题所述。此外,与 curl 相同的结果,无论是否使用纯 RUN 与 RUN 的 EXEC 模式与 wget 及其 args 都在 []
容器构建时没有错误,当我通过使用 bash 劫持入口点运行它时,我看到实际上只下载了几百字节的文件,然后从正在运行的容器内部,我可以获取完整的文件并运行它。
做了很多谷歌搜索,没有看到其他人。
???
FROM ubuntu:18.04
RUN echo "APT::Get::Assume-Yes \"true\";" > /etc/apt/apt.conf.d/90assumeyes
RUN apt-get update \
&& apt-get install \
ca-certificates \
jq \
git \
curl\
m4 \
make \
patch \
libev-dev \
libgmp-dev \
libhidapi-dev \
bubblewrap \
zip \
unzip \
g++ \
pkg-config
WORKDIR /azp
ENV DEBIAN_FRONTEND=noninteractive
RUN ["curl", "-s", "-o", "/usr/local/bin/opam", "https://github.com/ocaml/opam/releases/download/2.0.6/opam-2.0.6-x86_64-linux"]
RUN chmod a+x /usr/local/bin/opam
ENTRYPOINT ["bash"]
解决方案
问题在于curl
这里的命令
RUN ["curl", "-s", "-o", "/usr/local/bin/opam", "https://github.com/ocaml/opam/releases/download/2.0.6/opam-2.0.6-x86_64-linux"]
使用此命令,它会下载 HTML 页面而不是二进制文件。
执行详细请求,您可以看到请求正在被重定向
curl -v -o /usr/local/bin/opam https://github.com/ocaml/opam/releases/download/2.0.6/opam-2.0.6-x86_64-linux
...
> GET /ocaml/opam/releases/download/2.0.6/opam-2.0.6-x86_64-linux HTTP/1.1
> Host: github.com
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 302 Found
< date: Tue, 14 Apr 2020 19:33:11 GMT
< content-type: text/html; charset=utf-8
< server: GitHub.com
< status: 302 Found
...
在这种情况下,-L
必须将选项传递给 curl 请求
-L/--location (HTTP/HTTPS) 如果服务器报告请求的页面已经移动到不同的位置(用 Location: 标头和 3XX 响应代码指示),此选项将使 curl 在新的地方。
curl
将您的命令修改为
RUN ["curl", "-sL", "-o", "/usr/local/bin/opam", "https://github.com/ocaml/opam/releases/download/2.0.6/opam-2.0.6-x86_64-linux"]
或使用wget
RUN ["wget", "https://github.com/ocaml/opam/releases/download/2.0.6/opam-2.0.6-x86_64-linux"]
推荐阅读
- variables - Julia中变量名称的分数
- javascript - Vue用v-if设置2个条件
- sharepoint - Microsoft 流程执行顺序
- r - 使用 mutate() 中的延迟为创建的列向前滚动值
- c# - 如何使用 Accord.NET 中的 DecisionTree 类找到样本删除决策树的路径
- javascript - 如何每 X 毫秒只执行一次函数?
- json - 如何将标头添加到 JSON 以识别数组值的数组名称
- selenium - Selenium Chrome 浏览器 org.openqa.selenium.WebDriverException:等待驱动程序服务器启动超时
- asp.net-mvc - IIS 应用程序池重置 - 站点性能影响
- java - Spring boot userRepository.findAll() 显示次数过多导致stackoverflow错误