如何让docker在拉取镜像的时候使用代理
目录
主要内容
在某些情况下, 我们需要设置代理才能从 docker hub上拉取镜像, 本文描述了如何去做。
本文假设读者的docker 是使用 systemctl 进行控制的, 在这种情况下, 设置一下 systemctl 的配置文件就可以实现代理的目的了。
在目录 /usr/lib/systemd/system/docker.service.d
添加一个 任意名称.conf
文件, 比如http.conf
, 并添加如下内容:
|
|
注:
- 将
hostname_or_ip
替换成读者的代理服务器, 将port
替换成读者的代理服务器端口。 - 这个文件可能需要root权限, 所以需要使用
sudo
来添加。
后续步骤:
|
|
在笔者的版本中, docker 是拆分成了 docker 和 containerd, 直接重启 docker
的时候, 不会重启容器, 也许读者的不一样, 需要自己注意一下。
这样配置之后, docker pull 的时候就会走代理去拉取镜像了。
其他
仍然无法拉取镜像的问题
笔者配置了代理之后, 碰到了仍然无法拉取镜像的问题, 一番排查之后, 笔者发现是因为代理工具自身的代理规则没有使docker 相关的域名走代理, 还是直连。 之后笔者将代理工具的模式从规则修改成全局之后 就可以了。
让容器中的程序使用 HTTP 代理
基本上来说,这个没有什么万能的办法。 如果容器的程序会读取环境变量, 那么就设置一下 HTTP_PROXY
和 HTTPS_PROXY
或者 设置一下ALL_PROXY
的环境变量即可。 可以设置在 docker-compose.yaml
文件里面。
如果容器的程序不读这个环境变量, 就需要去查看容器的说明, 去寻找设置 proxy 的方法。