Dcoker配置Proxy
编辑Docker 配置 Proxy 全面指南
在企业或校园网络中,经常需要通过代理服务器访问外部资源(如 Docker Hub 的镜像仓库)。如果不进行代理配置,docker pull、构建镜像、安装依赖等操作可能会失败。Docker 提供了在 Docker Daemon(守护进程) 中设置代理的方法。本文将结合 Docker 官方文档,总结如何为 Docker 配置代理。
为什么需要配置 Proxy
在许多内网环境下,服务器并不能直接访问公网,而是需要借助企业代理服务器才能访问外部资源。Docker Daemon 本身运行在后台环境中,它不会继承你在 Shell 中设置的 HTTP_PROXY 或 HTTPS_PROXY 环境变量,因此需要单独为它配置。
基于 systemd 的配置方法
Docker Daemon 通常由 systemd 管理,因此代理配置也是通过 systemd 的服务配置文件来完成。
-
创建配置目录
sudo mkdir -p /etc/systemd/system/docker.service.d -
新建代理配置文件
在上面的目录下创建http-proxy.conf文件,填入:[Service] Environment="HTTP_PROXY=http://proxy.example.com:3128" Environment="HTTPS_PROXY=https://proxy.example.com:3129" Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"HTTP_PROXY:HTTP 代理地址HTTPS_PROXY:HTTPS 代理地址NO_PROXY:无需走代理的主机或域名(如localhost及内网 Docker 私有仓库)
-
重新加载并重启 Docker
sudo systemctl daemon-reexec sudo systemctl restart docker上述命令会让新的代理配置生效。
验证代理设置
执行以下命令检查环境变量:
systemctl show --property=Environment docker
你应当能看到 HTTP_PROXY 等配置是否已正确生效。
针对 Rootless 模式的配置
如果你在使用 Rootless 模式 运行 Docker,则 Docker Daemon 是以用户 systemd 服务运行的。此时需要在 ~/.config/systemd/user/docker.service.d/http-proxy.conf 中添加同样的配置,然后执行:
systemctl --user daemon-reexec
systemctl --user restart docker
注意事项
- 不要在
/etc/docker/daemon.json中配置 Proxy,这是无效的。 - 如果同时使用了 Docker Desktop,其图形界面中也提供了专门的代理配置入口,不建议直接修改 systemd。
- 企业网络可能会限制仅允许走指定白名单域名,因此确保
NO_PROXY中包括必要的内部仓库地址。
在为 Docker Daemon 配置代理的同时,Docker CLI(客户端) 也可能需要配置代理环境变量,尤其当 CLI 命令本身需要访问外部资源而 Docker Daemon 环境未继承代理时。CLI 的代理配置通常是通过设置环境变量来完成的。
Docker CLI 的代理配置方法
-
直接在命令行中设置环境变量
在执行命令时临时指定代理:HTTP_PROXY=http://proxy.example.com:3128 \ HTTPS_PROXY=https://proxy.example.com:3129 \ NO_PROXY=localhost,127.0.0.1,docker-registry.example.com \ docker pull ubuntu这种方式仅对当前命令有效。
-
配置成全局环境变量
将代理环境变量写入用户 Shell 配置文件,如~/.bashrc或~/.zshrcexport HTTP_PROXY="http://proxy.example.com:3128" export HTTPS_PROXY="https://proxy.example.com:3129" export NO_PROXY="localhost,127.0.0.1,.corp,docker-registry.example.com"修改后执行
source ~/.bashrc使其生效。- 优点:所有 Docker CLI 命令都自动使用代理。
- 缺点:同时影响其他依赖 HTTP(S) 请求的命令行工具。
-
为单用户或脚本单独设置
如果只想为 Docker CLI 配置而不影响全局环境变量,可以在调用 Docker CLI 的脚本中直接写入上述export行。
验证 CLI 代理是否生效
执行一个需要访问外网的命令,比如拉取 Docker Hub 镜像:
docker pull alpine
若成功下载则说明 CLI 已正确通过代理访问。
- 0
- 0
-
分享