docker - yum 更新/apk 更新/apt-get 更新在代理后面不起作用

标签 docker proxy dockerfile docker-for-windows

我在代理后面,我无法构建 Docker 镜像。

我试过 FROM ubuntu , FROM centosFROM alpine ,但是 apt-get update/yum update/apk update失败的。

我的主机操作系统是 Windows 10,所以我配置了我的 Docker 设置以使用我们的代理。

我还补充说

ENV http_proxy http://<PROXY>
ENV https_proxy http://<PROXY>

到我的 Dockerfile 但没有成功。

我还尝试将我的代理设置为 http://<USER>:<PASS>@<PROXY> ,但再次没有成功。

我能够拉取 Docker 镜像。当我将代理设置设置为无代理时,我无法提取图像,所以我猜我的代理 URL 是正确的。

任何想法我还能尝试什么?

编辑:

我还尝试将我们的 DNS 服务器(列在 ipconfig /all 下)添加到 Docker 设置中,但还是没有成功。

编辑 2:
我刚刚意识到我忘记了 Ubuntu Dockerfile 中的“http://”。添加后,docker build现在适用于 ubuntu - 但仅适用于 ubuntu。 它仍然不适用于 centosalpine .

这是我所有的 3 个 Dockerfile:

Ubuntu:
FROM ubuntu

ENV http_proxy "http://<MY-PROXY>"
ENV https_proxy "http://<MY-PROXY>"

RUN apt-get update

CentOS:
FROM centos

ENV http_proxy "http://<MY-PROXY>"
ENV https_proxy "http://<MY-PROXY>"

RUN yum update 

Alpine :
FROM alpine

ENV http_proxy "http://<MY-PROXY>"
ENV https_proxy "http://<MY-PROXY>"

RUN apk update 

错误消息:

CentOS:
Step 4/4 : RUN yum update
 ---> Running in 3deecb71823d
Loaded plugins: fastestmirror, ovl

 One of the configured repositories failed (Unknown),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:

[...]

Cannot find a valid baseurl for repo: base/7/x86_64

Alpine :
Step 4/4 : RUN apk update
 ---> Running in 76c8579734cf
fetch http://dl-cdn.alpinelinux.org/alpine/v3.6/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.6/main: could not connect to server (check repositories file)
WARNING: Ignoring APKINDEX.84815163.tar.gz: No such file or directory
fetch http://dl-cdn.alpinelinux.org/alpine/v3.6/community/x86_64/APKINDEX.tar.gz
2 errors; 11 distinct packages available
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.6/community: could not connect to server (check repositories file)
WARNING: Ignoring APKINDEX.24d64ab1.tar.gz: No such file or directory
The command '/bin/sh -c apk update' returned a non-zero code: 2

最佳答案

对于 CentOS,我必须明确输入我的代理端口 80并删除 http:// -部分。
因此,对于 CentOS,一个可行的解决方案如下所示(如果代理在端口 80 上运行):

FROM centos

ENV http_proxy=<My-PROXY>:80
ENV https_proxy=<My-PROXY>:80

RUN yum update

Alpine 仍然缺失,看起来它需要额外的行:
ENV HTTP_PROXY_AUTH=basic:*:<USER>:<PASS>

但不适合我。可能是因为我的密码中有特殊字符,请参阅:https://github.com/gliderlabs/docker-alpine/issues/305

如果我找到解决方案,我会更新这个答案。

编辑:
对于 Alpine ,我使用这个:
FROM alpine

ENV http_proxy=http://<My-PROXY>:80/
ENV https_proxy=http://<My-PROXY>:80/

RUN apk update

关于docker - yum 更新/apk 更新/apt-get 更新在代理后面不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46930903/

相关文章:

flash - 查尔斯代理 Flash 游戏

node.js - 从另一个容器连接 couchdb 容器

nginx - plesk 上的 Varnish + Nginx 代理配置

scala - 如何在运行测试之前启动 docker 容器

docker - 我可以静音 QStandardPaths : XDG_RUNTIME_DIR not set, 默认为 '/tmp/runtime-'

bash - 是否可以将Dockerfile中的ENV变量与正则表达式或包含之类的类似内容进行比较?

docker - 如何减少构建上下文

python-3.x - Docker 容器的 sshfs 挂载卡住,但仅当由 Python 挂载时

android - 如何剥离 3-rd 方网站以便在移动设备上更好地显示?

c# - 如何在 C# 中检查防火墙和代理环境中的网络连接