Dockerfile中使用pip构建elasticsearch-curator镜像的代理问题
解决代理环境下Docker构建Elasticsearch Curator镜像的pip超时问题
你遇到的核心问题是:通过--build-arg传递的代理参数没被pip识别到,同时你不想在Dockerfile里硬编码代理配置影响其他用户。下面是几个无需修改Dockerfile永久配置的可行方案:
方案1:用ARG临时注入代理环境变量(推荐)
这个方法让代理配置仅在构建阶段的依赖安装步骤生效,不会保留到最终镜像中,其他用户构建时无需修改Dockerfile。
修改你的Dockerfile如下:
FROM alpine:3.7 # 声明接收代理参数的ARG ARG HTTP_PROXY ARG HTTPS_PROXY RUN adduser -S curator RUN \ # 临时设置代理环境变量(仅当前RUN命令生效) export HTTP_PROXY=$HTTP_PROXY && \ export HTTPS_PROXY=$HTTPS_PROXY && \ 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"]
执行构建命令时同时传递HTTP和HTTPS代理(PyPI使用HTTPS协议,必须指定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 .
方案2:直接给pip命令指定代理参数
如果不想在RUN里设置环境变量,也可以直接在pip install命令后添加--proxy参数,把构建参数传给pip:
修改Dockerfile中的pip安装部分:
RUN apk add --update \ python \ python-dev \ py-pip \ build-base \ && pip install --proxy ${HTTP_PROXY} virtualenv \ && pip install --proxy ${HTTP_PROXY} elasticsearch-curator \ && rm -rf /var/cache/apk/*
构建命令保持和你之前的一致:
docker build --no-cache --build-arg HTTP_PROXY=http://xx.xx.xx.xx:xx -t elasticsearch-curator:5.4 .
为什么之前的命令失败?
你之前只通过--build-arg传递了参数,但Docker不会自动把build-arg转换为容器内的环境变量,所以pip运行时无法获取到代理配置,导致连接PyPI超时。上面的两种方法都是在构建阶段临时把代理参数传递给pip,同时避免将代理信息写入最终镜像。
内容的提问来源于stack exchange,提问作者Juliatzin
相关产品推荐
相关产品推荐

