docker添加代理遇到的坑

    24

docker添加代理遇到的坑

环境:

  • Server Version: 24.0.6

  • Kernel Version: 5.15.0-87-generic

  • Operating System: Linux Mint 21.2

  • Architecture: x86_64

为了容器内服务能够正常访问github,因此在本机部署了FastGithub项目的Http/Https代理,现在需要容器内的流量也经过本地代理端口。

一、Dockerd 代理

在执行docker pull时,是由守护进程dockerd来执行。因此,代理需要配在dockerd的环境中。而这个环境,则是受systemd所管控,因此实际是systemd的配置。

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf

在这个proxy.conf文件(可以是任意*.conf的形式)中,添加以下内容:

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:38457/"
Environment="HTTPS_PROXY=http://127.0.0.1:38457/"
Environment="NO_PROXY=localhost,127.0.0.1,triis.top"

其中,127.0.0.1:38457 是我宿主机的FastGithub代理。之后重载守护进程并重启docker服务,如下:

sudo systemctl daemon-reload
sudo systemctl restart docker

:这样配置虽然可以满足我的需求,使得每一个已启动的容器都能正常访问github,但是docker pull时会出现无法连接docker hub的报错信息,并且配置国内镜像源也不起作用。据Stack Overflow所说,Https代理也只能写http地址,不能加s,未验证。

二、Container 代理

容器运行阶段,如果需要代理上网,则需要配置 ~/.docker/config.json。以下配置,只在Docker 17.07及以上版本生效。

{
	"...":{
	...
	},
	"proxies":{
	  "default":{
	    "httpProxy": "http://127.0.0.1:38457",
	    "httpsProxy": "http://127.0.0.1:38457",
	    "noProxy": "localhost,127.0.0.1,triis.top"
	  }
	}
}

这个是用户级的配置,除了 proxiesdocker login 等相关信息也会在其中。而且还可以配置信息展示的格式、插件参数等。

此外,容器的网络代理,也可以直接在其运行时通过 -e 注入 http_proxy 等环境变量。这两种方法分别适合不同场景。config.json 非常方便,默认在所有配置修改后启动的容器生效,适合个人开发环境。在CI/CD的自动构建环境、或者实际上线运行的环境中,这种方法就不太合适,用 -e 注入这种显式配置会更好,减轻对构建、部署环境的依赖。当然,在这些环境中,最好用良好的设计避免配置代理上网。

消息盒子

# 暂无消息 #

只显示最新10条未读和已读信息