Docker 配置代理方法
【1】适用场景
当 Docker 守护进程需要访问国外网络时(如 docker login、docker push 到 Docker Hub),而宿主机有可用代理,需要给 Docker 服务单独配置代理(Docker 不读 shell 的http_proxy 环境变量,必须单独配)。
查看本机代理地址
1 | env | grep -i proxy |
从输出中找到代理地址(一般是 http://某IP:某端口)。
【2】配置步骤
1、创建配置文件
1 | mkdir -p /etc/systemd/system/docker.service.d |
写入以下内容(把 <你的代理IP> 和 <端口> 换成实际值):
1 | [Service] |
NO_PROXY 的含义:这些地址不走代理。其中 192.168.x.x 和 172.16~31.x.x 覆盖内网和 Docker 容器网段,容器间通信必须直连,不能省略。
2、重载并重启 Docker
1 | systemctl daemon-reload |
注意:重启 Docker 会停止所有运行中的容器,重启后需要重新启动业务容器:
1 | cd <项目目录> && docker compose up -d |
3、验证
1 | systemctl show docker --property=Environment |
输出中包含刚才配置的代理地址即生效。
之后测试:
1 | docker login -u <用户名> # 能返回 Login Succeeded 即网络已通 |
修改代理地址
1 | nano /etc/systemd/system/docker.service.d/proxy.conf # 改地址 |
取消代理
1 | rm /etc/systemd/system/docker.service.d/proxy.conf |
4、补充说明
• 镜像加速器(/etc/docker/daemon.json 里的 registry-mirrors)只加速 pull(下载),对 login/push 无效;代理两者都管。
• 推荐组合:pull 走国内镜像加速器(快),login/push 走代理(唯一能连上 Docker Hub 的方式)。
• 如果 build 过程中 pip/npm 下载国外包超时,同样是因为构建容器直连国外失败,解法是把包管理源换成国内镜像(PyPI 用清华源、npm 用淘宝源),不一定要配代理。