docker 代理设置

docker 代理设置

在这里讲 docker 代理设置其实本质上有两种 proxy,一种是针对 docker 应用本身的 proxy,一种是针对 docker 容器的 proxy。我讲它们分别称之为 docker proxycontainer proxy

两类代理的设置都需要代理服务器支持,如果你还没有代理服务器,可以考虑从该地址购买相应服务。

代理设置

配置好 VPN 客户端之后,在设置中开启局域网共享(Allow connections from LAN)。以本人使用的 Trojan-Qt5 为例:

image-20220317162205614

开启成功后,socks5 和 http 的监听地址变为 INETADDR_ANY

image-20220317162350148

现在同一个局域网下的设备都可以将当前的机器用作代理服务器了,比如你的手机,ipad 或者 switch 都可以科学上网了。

docker proxy

docker proxy 主要就是用在 pull image 的时候。设置非常简单:

1
2
3
4
5
6
7
$ sudo mkdir -p /etc/systemd/system/docker.service.d
$ vim /etc/systemd/system/docker.service.d/http-proxy.conf
$ cat /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:58591"
Environment="HTTPS_PROXY=http://127.0.0.1:58591"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"

container proxy

container proxy 的用途比较广泛,常见的比如 ignite 在编译的时候会跑一个 docker,并且在 docker 中下载各种 tar 包,而这些 tar 包通常放在 github 或者一些不存在的网站上。

设置 container proxy 有两种方法

  • docker version >= 17.07,设置 ~/.docker/config.json
1
2
3
4
5
6
7
8
9
10
11
12
$ cat ~/.docker/config.json
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://192.168.1.12:58591",
     "httpsProxy": "http://192.168.1.12:58591",
     "noProxy": "*.test.example.com,.example2.com,127.0.0.0/8"
   }
 }
}
  • docker version <= 17.06,设置 environment
1
2
3
4
5
$ docker run --env HTTP_PROXY="http://192.168.1.12:58591" \
			 --env HTTPS_PROXY="http://192.168.1.12:58591" \
			 --env FTP_PROXY="ftp://192.168.1.12:58591" \
			 --env NO_PORXY="*.test.example.com,.example.com" \
			 ....

有两个点需要注意:

  1. 在这里 192.168.1.12 是当前物理机在局域网中的地址;
  2. 务必开启局域网共享,参考代理设置一节, container 可被认为是该局域网下单独的一个设备。

reference