Docker 代理相关设置
简介
Docker 的代理设置分为为 Docker 守护进程设置代理和为 Docker 容器设置代理。为 Docker 守护进程设置代理,在使用 docker cli 命令行时会使用代理网络,网络状况不好时可以加速镜像的拉取。为 Docker 容器设置代理可以让容器内部的网络通过代理设置上网,达到某些特殊需求。
在进行 Docker 的代理设置前,默认已经配置好了可以代理的 HTTP 或 SOCKS 协议的端口,配置教程自行从网络上获取。
为 Docker 守护进程设置代理
1、测试网络
运行命令,测试网络可用性。
docker run hello-world
2、创建配置文件
创建或编辑 Docker 的服务配置文件,添加 http-proxy.conf 文件。
# 标准 Linux 系统
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf
# 群晖系统
sudo mkdir -p /etc/systemd/system/pkg-ContainerManager-dockerd.service.d
sudo vi /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
在文件中添加以下内容(根据你的情况设置某种代理):
# HTTP 代理
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:port"
Environment="HTTPS_PROXY=http://proxy.example.com:port"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
# Socks5 代理
[Service]
Environment="HTTP_PROXY=socks5://192.168.1.3:10808"
Environment="HTTPS_PROXY=socks5://192.168.1.3:10808"
Environment="NO_PROXY=localhost,127.0.0.1"
# 带认证
[Service]
Environment="HTTP_PROXY=socks5://用户名:密码@192.168.1.3:10808"
Environment="HTTPS_PROXY=socks5://用户名:密码@192.168.1.3:10808"
Environment="NO_PROXY=localhost,127.0.0.1"
HTTP_PROXY
和 HTTPS_PROXY
是代理地址,NO_PROXY
是无需代理的地址列表,如果你有内建的 registry-mirrors, 记得加入 NO_PROXY
中,如有认证,用户名
和密码
换成自己的信息。
3、重新加载 Docker 配置并重启 Docker 服务
# 标准 Linux 系统
sudo systemctl daemon-reload
sudo systemctl restart docker
# 群晖系统
sudo systemctl daemon-reload
sudo systemctl restart pkg-ContainerManager-dockerd.service
4、验证代理是否生效
执行以下代码,如果显示刚刚设置的代理信息,说明配置成功。
# 标准 Linux 系统
systemctl show --property=Environment docker
# 群晖系统
systemctl show --property=Environment pkg-ContainerManager-dockerd.service
再次执行 hello-world,应该可以成功运行
docker run hello-world
为 Docker 容器设置代理
1、在运行容器时指定环境变量(指定容器生效)
另外如果要在 Docker 容器内通过代理访问网络,你可以在运行 Docker 容器时,设置环境变量来指定代理,在运行容器时,通过 -e
参数传递代理环境变量:
docker run -e HTTP_PROXY=http://proxy.example.com:port \
-e HTTPS_PROXY=http://proxy.example.com:port \
-e NO_PROXY=localhost,127.0.0.1 \
your-image
群晖 Docker 的设置可以在常规设置,高级设置,在高级设置的环境选项卡中设置环境变量。如果是之前已经创建好的容器,也可以随时点击编辑,在里面设置网络和环境变量。
2、修改 config.json 配置文件(全局容器生效)
参考官方文档的说明,在 ~/.docker/config.json 中设置代理
{
"proxies": {
"default": {
"httpProxy": "http://proxy.example.com:3128",
"httpsProxy": "https://proxy.example.com:3129",
"noProxy": "*.test.example.com,.example.org,127.0.0.0/8"
}
}
}
保存文件后配置将生效,适用于新容器的生成和运行,无需重启 Docker。
参考文献:
- 为群晖 Container Manager 配置代理:https://blog.chai.ac.cn/posts/docker-proxy
- 【新手教程】群晖 DSM 7.2 为 Docker 设置 HTTP/HTTPS/SOCKS5 代理:https://www.itblogcn.com/article/2620.html