Docker构建AWS Lambda镜像遇代理故障:拉取及yum更新失败
问题解决:GFW环境下Docker构建AWS Lambda镜像的代理问题
问题1:Docker Build拉取public.ecr.aws基础镜像失败
症状
执行docker build时卡在FROM public.ecr.aws/lambda/python:3.11步骤,报错无法获取ECR匿名token,但单独执行docker pull public.ecr.aws/lambda/python:3.11可成功拉取。
原因
Docker daemon的HTTPS_PROXY配置错误——本地VPN代理通常使用HTTP协议监听,而非HTTPS。
解决方案
- 修正
/etc/systemd/system/docker.service.d/http-proxy.conf中的代理配置:
[Service] Environment="HTTP_PROXY=http://127.0.0.1:7890/" Environment="HTTPS_PROXY=http://127.0.0.1:7890/" Environment="NO_PROXY=localhost,127.0.0.1,internal.ecr.aws"
- 重启Docker服务使配置生效:
sudo systemctl daemon-reload sudo systemctl restart docker
- 验证配置是否加载成功:
systemctl show --property=Environment docker
输出应包含正确的代理环境变量。
问题2:修正代理后Dockerfile中yum update -y失败
症状
拉取基础镜像成功,但执行yum update时提示无法连接127.0.0.1:7890。
原因
容器内部的127.0.0.1指向容器自身网络栈,而非宿主机的代理服务,因此无法访问宿主机的VPN端口。
解决方案
提供两种可行方案,按需选择:
方案1:构建时传递宿主机代理IP参数
- 获取宿主机的局域网IP(如
192.168.1.100,可通过ip addr show查看)。 - 修改构建命令,通过
--build-arg传递代理参数:
docker build --progress=plain --platform="linux/x86_64" --no-cache -t projects/my-project . -f projects/my-project/Dockerfile \ --build-arg HTTP_PROXY=http://<宿主机局域网IP>:7890 \ --build-arg HTTPS_PROXY=http://<宿主机局域网IP>:7890 \ --build-arg NO_PROXY=localhost,127.0.0.1
- 在Dockerfile中引用这些参数(确保在
RUN yum update前设置):
ARG HTTP_PROXY ARG HTTPS_PROXY ARG NO_PROXY ENV HTTP_PROXY=$HTTP_PROXY ENV HTTPS_PROXY=$HTTPS_PROXY ENV NO_PROXY=$NO_PROXY RUN yum update -y
方案2:使用宿主机网络构建
直接让容器共享宿主机网络栈,这样容器内的127.0.0.1即可指向宿主机代理:
docker build --progress=plain --platform="linux/x86_64" --no-cache -t projects/my-project . -f projects/my-project/Dockerfile --network=host
注意:确保VPN工具已开启“允许局域网连接”权限,避免端口访问被限制。
内容的提问来源于stack exchange,提问作者Alex Friedmann
相关产品推荐
相关产品推荐

