我正在尝试为elasticsearch-curator构建一个Docker镜像,
这是dockerfile:
FROM alpine:3.7
RUN adduser -S curator
RUN apk add --update \
python \
python-dev \
py-pip \
build-base \
&& pip install virtualenv \
&& pip install elasticsearch-curator \
&& rm -rf /var/cache/apk/*
USER curator
ENTRYPOINT [ "/usr/bin/curator"]
事情是我在代理人之下,所以我必须建立我的形象:
docker build --no-cache --build-arg HTTP_PROXY=http://xx.xx.xx.xx:xx -t elasticsearch-curator:5.4 .
但是当它想要获得virtualenv时,我得到:
Collecting virtualenv
Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'ConnectTimeoutError(<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fb8259ed350>, 'Connection to pypi.python.org timed out. (connect timeout=15)')': /simple/virtualenv/
Retrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'ConnectTimeoutError(<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fb8259ed210>, 'Connection to pypi.python.org timed out. (connect timeout=15)')': /simple/virtualenv/
我找到了解决插入问题的人
ENV http_proxy http://proxy-chain.xxx.com:911/
ENV https_proxy http://proxy-chain.xxx.com:912/
在Dockerfile中,但我不可能,因为我的代理仅在我的建筑物上有效,所以如果来自其他地方的另一个人想要构建图像,他将需要从Dockerfile中删除http_proxy env var。 / p>
还有其他方法可以实现吗?这似乎是一个非常常见的用例...
答案 0 :(得分:14)
我通过在命令行中添加HTTPS_PROXY
来解决它:
docker build --no-cache --build-arg HTTP_PROXY=http://xx.xx.xx.xx:xx --build-arg HTTPS_PROXY=http://xx.xx.xx.xx:xx -t elasticsearch-curator:5.4 .
答案 1 :(得分:4)
不要在Dockerfile中包含代理设置。
如果您在主机上正确配置了代理设置,则可以使用--network= host
构建docker镜像。这将使build命令使用主机的网络设置。
docker build --no-cache --network=host -t elasticsearch-curator:5.4 .
答案 2 :(得分:1)
我认为这是因为pip install需要显式代理arg。
尝试制作install.sh
pip安装程序。
如果配置了代理(传递为build-arg
,即设置为环境),请使用以下命令安装:
pip install --proxy=https://user@mydomain:port virtualenv
使用env变量:
pip install --proxy=$HTTP_PROXY virtualenv
如果没有,请在没有代理的情况下进行pip安装。
答案 3 :(得分:0)
您可以通过主目录或用户目录目录中的〜\ .docker \ config.json 文件配置所有客户端代理:
{
"credsStore": "wincred",
"auths": {},
"stackOrchestrator": "swarm",
"proxies":
{
"default":
{
"httpProxy": "http://127.0.0.1:3001",
"noProxy": "*.test.example.com,.example2.com"
}
}
}
默认情况下,前三个条目在那里,只需将“代理” 部分添加到文件中即可。