前言
docker使用proxy分两种情况:
- docker client希望使用代理,也就是在执行docker pull、docker push等操作时通过代理来访问镜像仓库
- 容器实例希望使用代理,也就是在容器内部希望通过代理来访问网络
两者的配置显然是不一样,各自的官方文档见文末参考文献.
配置client 代理(常规安装方式)[1]
创建配置文件
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
添加配置
[Service]
Environment="HTTP_PROXY=http://211.69.198.232:8118"
Environment="HTTPS_PROXY=http://211.69.198.232:8118"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp,211.69.198.232"
重启容器
sudo systemctl daemon-reload
sudo systemctl restart docker
配置容器实例代理[2]
方式一,配置文件(仅支持 Docker 版本 >= 17.07)
1、创建配置文件
vim ~/.docker/config.json
2、添加配置信息
{
"proxies":
{
"default":
{
"httpProxy": "http://211.69.198.232:8118",
"httpsProxy": "http://211.69.198.232:8118",
"noProxy": "*.test.example.com,.example2.com,127.0.0.0/8,211.69.198.232"
}
}
}
方式二,手动添加环境变量(仅支持 Docker 版本 >= 17.07)
通过 --env
在启动容器时,添加对应的环境变量:
Variable | Dockerfile example | docker run example |
---|---|---|
HTTP_PROXY | ENV HTTP_PROXY=”http://192.168.1.12:3128“ | –env HTTP_PROXY=”http://192.168.1.12:3128“ |
HTTPS_PROXY | ENV HTTPS_PROXY=”https://192.168.1.12:3128“ | –env HTTPS_PROXY=”https://192.168.1.12:3128“ |
FTP_PROXY | ENV FTP_PROXY=”ftp://192.168.1.12:3128″ | –env FTP_PROXY=”ftp://192.168.1.12:3128″ |
NO_PROXY | ENV NO_PROXY=”*.test.example.com,.http://example2.com“ | –env NO_PROXY=”*.test.example.com,.http://example2.com“ |
WSL2中配置代理
对于容器实例的代理, 配置方式同上所述, 问题在于Docker CLient的代理配置, 因为WSL2并不是采用Systemd方式管理的!
情况一, docker安装在WSL2中[3]
即,在WSL2中通过通用方式安装的docker.
sudo vim /etc/default/docker
输入:
export HTTP_PROXY="http://211.69.198.232:8118"
export HTTPS_PROXY="http://211.69.198.232:8118"
export NO_PROXY="localhost,127.0.0.0/8,172.16.0.0/12,192.168.0.0/16,10.0.0.0/8"
情况二, 安装了Docker-Desktop
即, 安装了Windows版本的Docker.


修改完成后, 可以通过以下命令检查:
cat /etc/default/docker

参考
- Control Docker with systemd https://docs.docker.com/config/daemon/systemd/#httphttps-proxy
- Configure Docker to use a proxy server https://docs.docker.com/network/proxy/
- WSL 2 Docker Behind Proxy https://stevegy.medium.com/wsl-2-docker-behind-proxy-fc55083d5ec5