when someone abandons you,it is him that gets loss because he lost someone who truly loves him but you just lost one who doesn’t love you.
在 linux 的 Docker 中配置代理通常需要区分不同的应用场景,因为 Docker 的不同组件(下载镜像、容器内抓取数据、编译打包)读取代理配置的位置是不同的。
以下是三种最常见的 Docker 代理配置方法:
docker pull 慢、超时、拉不动镜像)当在终端执行 docker pull 时,是由 Docker Daemon 后台守护进程去下载镜像的,因此直接在终端 export 环境变量是无效的,必须通过 systemd 配置
操作步骤:
1 | sudo mkdir -p /etc/systemd/system/docker.service.d |
1 | sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf |
proxy 替换为你实际的代理 IP 和端口):1 | [Service] |
1 | sudo systemctl daemon-reload |
docker info,在输出的底部如果看到 HTTP Proxy 和 HTTPS Proxy 字样,说明配置成功curl 报错)如果你希望启动的容器内部自动带有代理(例如容器内跑的脚本需要请求外网 API,或者安装依赖),可以通过修改用户目录下的 .docker/config.json 来实现全局注入
操作步骤:
1 | mkdir -p ~/.docker |
proxies 配置:1 | { |
💡 替代方案(单次临时生效):
如果你不想污染全局配置,可以在 docker run 时通过 -e 注入变量:
1 | docker run -d \ |
Dockerfile 编译打包时安装依赖慢)docker build 代理(Dockerfile 编译打包时安装依赖慢)在使用 docker build 构建新镜像时(主要考虑 Dockerfile 里的 RUN 阶段,例如执行 RUN pip install 或 RUN apt-get update 时发生卡顿等网络连带问题),需要通过参数传递代理
操作步骤:
在执行编译命令时,使用 --build-arg 参数将代理传进去:
1 | docker build \ |
docker buildx create --driver docker-container 会启动一个独立的 BuildKit builder 容器,这个 builder 容器自己需要访问 registry 拉基础镜像、读取 metadata,而场景三 -A 中 --build-arg HTTP_PROXY=... 主要影响 Dockerfile 里的 RUN 阶段,所以多架构 buildx 构建时,可能需要同时配置:
--driver-opt env.HTTP_PROXY=...--build-arg HTTP_PROXY=...操作步骤:
1 | docker buildx create \ |
然后构建:
1 | docker buildx build \ |
be slow to promise and quick to perform.