cfanbo / cfanbo.github.io

1 stars 0 forks source link

利用代理拉取docker镜像 | 学习笔记 #41

Open cfanbo opened 1 year ago

cfanbo commented 1 year ago

https://blog.haohtml.com/archives/31298/

在日常开发中经常会遇到有些镜像在 gcr.io 仓库,其仓库是google提供的,由于国内网络环境的复杂性是无法拉取到这些镜像的,这时候就需要我们想一些办法来实现拉取了。 这里给出了两种解决方法,一种是直接使用代理,这种可以直接拉取远程镜像到本地。另一种是通过中转的方法,先找一个可以直接拉取到镜像的网络,先将存储到本地,然后再转镜像上传到三方国内可以访问的镜像,如我们最常用镜像 hub.docker.com。 代理方法 使用代理方法的时候,如果通过直接设置 http_proxy 和 https_proxy 这两个环境变量是不可行的。主要原因是 docker 并不会使用它们,需要为 docker daemon 服务的设置代理才可以。 设置docker服务代理 sudo mkdir -p /etc/systemd/system/docker.service.d/ sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf 将以下内容写入 http-proxy.conf 文件 [Service] Environment="HTTP_PROXY=http://127.0.0.1:7890" Environment="HTTPS_PROXY=http://127.0.0.1:7890" Environment="ALL_PROXY=socks5://127.0.0.1:7890" Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp,.docker.io,.docker.com" 上面代理地址是本机开启的代理服务监听端口,如果代理服务在局域网内的其它机器上的话,需要更换为其 ip 地址和端口号。环境变量 NO_PROXY 表示不使用代理的域名或IP。 重启 docker 服务 root@ubuntu:~# systemctl daemon-reload root@ubuntu:~# systemctl restart docker 验证设置 root@ubuntu:~# systemctl show --property=Environment docker Environment=HTTP_PROXY=http://127.0.0.1:7890 HTTPS_PROXY=http://127.0.0.1:7890 ALL_PROXY=socks5://127.0.0.1:7890 NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp,.docker.io,.docker.com 也可以使用命令 docker info 验证 root@ubuntu:~# docker info ... Debug Mode: false HTTP Proxy: http://127.

389377616 commented 4 months ago

设置了代理以后,那些流量会走代理,是只会拉取镜像时候才是使用代理嘛,运行容器,容器的流量不会也都走代理了吧,那样的话我怕偷跑机场流量,机场流量撑不住....

cfanbo commented 4 months ago

@389377616 设置了代理以后,那些流量会走代理,是只会拉取镜像时候才是使用代理嘛,运行容器,容器的流量不会也都走代理了吧,那样的话我怕偷跑机场流量,机场流量撑不住....

只有在宿主机器上执行了docker 命令才会使用代理,而容器里并不会执行docker pull 命令的,因此并不会被代理。

389377616 commented 4 months ago

@389377616 设置了代理以后,那些流量会走代理,是只会拉取镜像时候才是使用代理嘛,运行容器,容器的流量不会也都走代理了吧,那样的话我怕偷跑机场流量,机场流量撑不住....

只有在宿主机器上执行了docker 命令才会使用代理,而容器里并不会执行docker pull 命令的,因此并不会被代理。

我是群晖nas,版本是7.1,我按照教程在/etc/systemd/system/docker.service.d/路径下新建了文件http-proxy.conf,然后把文件内容写入保存了,然后重启了docker服务,结果使用命令验证代理的时候,验证失败了,输入完命令调出来的结果里没有代理相关的内容,这个是什么情况?难道是群晖的docker和一般Linux系统的docker配置文件路径不一样不成

cfanbo commented 4 months ago

@389377616

@389377616 设置了代理以后,那些流量会走代理,是只会拉取镜像时候才是使用代理嘛,运行容器,容器的流量不会也都走代理了吧,那样的话我怕偷跑机场流量,机场流量撑不住....

只有在宿主机器上执行了docker 命令才会使用代理,而容器里并不会执行docker pull 命令的,因此并不会被代理。

我是群晖nas,版本是7.1,我按照教程在/etc/systemd/system/docker.service.d/路径下新建了文件http-proxy.conf,然后把文件内容写入保存了,然后重启了docker服务,结果使用命令验证代理的时候,验证失败了,输入完命令调出来的结果里没有代理相关的内容,这个是什么情况?难道是群晖的docker和一般Linux系统的docker配置文件路径不一样不成

使用 docker info 命令查看一下代理配置是否生效,记得配置完代理后重启一下docker服务。其次确认一下代理服务是否启动成功?可以按这两个方向排查一下,实在不用用 tcpdump 抓包排查一下。

389377616 commented 4 months ago

@389377616

@389377616 设置了代理以后,那些流量会走代理,是只会拉取镜像时候才是使用代理嘛,运行容器,容器的流量不会也都走代理了吧,那样的话我怕偷跑机场流量,机场流量撑不住....

只有在宿主机器上执行了docker 命令才会使用代理,而容器里并不会执行docker pull 命令的,因此并不会被代理。

我是群晖nas,版本是7.1,我按照教程在/etc/systemd/system/docker.service.d/路径下新建了文件http-proxy.conf,然后把文件内容写入保存了,然后重启了docker服务,结果使用命令验证代理的时候,验证失败了,输入完命令调出来的结果里没有代理相关的内容,这个是什么情况?难道是群晖的docker和一般Linux系统的docker配置文件路径不一样不成

使用 docker info 命令查看一下代理配置是否生效,记得配置完代理后重启一下docker服务。其次确认一下代理服务是否启动成功?可以按这两个方向排查一下,实在不用用 tcpdump 抓包排查一下。

你说的我都执行过了,保存完代理配置文件以后在群晖套件中心停用docker服务,然后重新启用,然后输入docker info,输出的结果里没有有关代理设置的任何信息。

cfanbo commented 4 months ago

@389377616

@389377616

@389377616 设置了代理以后,那些流量会走代理,是只会拉取镜像时候才是使用代理嘛,运行容器,容器的流量不会也都走代理了吧,那样的话我怕偷跑机场流量,机场流量撑不住....

只有在宿主机器上执行了docker 命令才会使用代理,而容器里并不会执行docker pull 命令的,因此并不会被代理。

我是群晖nas,版本是7.1,我按照教程在/etc/systemd/system/docker.service.d/路径下新建了文件http-proxy.conf,然后把文件内容写入保存了,然后重启了docker服务,结果使用命令验证代理的时候,验证失败了,输入完命令调出来的结果里没有代理相关的内容,这个是什么情况?难道是群晖的docker和一般Linux系统的docker配置文件路径不一样不成

使用 docker info 命令查看一下代理配置是否生效,记得配置完代理后重启一下docker服务。其次确认一下代理服务是否启动成功?可以按这两个方向排查一下,实在不用用 tcpdump 抓包排查一下。

你说的我都执行过了,保存完代理配置文件以后在群晖套件中心停用docker服务,然后重新启用,然后输入docker info,输出的结果里没有有关代理设置的任何信息。

按官方文档 https://docs.docker.com/config/daemon/systemd/#httphttps-proxy 确认一下操作是否有误吧,按理说docker软件配置是通用的。

cfanbo commented 4 months ago

@389377616

@389377616

@389377616 设置了代理以后,那些流量会走代理,是只会拉取镜像时候才是使用代理嘛,运行容器,容器的流量不会也都走代理了吧,那样的话我怕偷跑机场流量,机场流量撑不住....

只有在宿主机器上执行了docker 命令才会使用代理,而容器里并不会执行docker pull 命令的,因此并不会被代理。

我是群晖nas,版本是7.1,我按照教程在/etc/systemd/system/docker.service.d/路径下新建了文件http-proxy.conf,然后把文件内容写入保存了,然后重启了docker服务,结果使用命令验证代理的时候,验证失败了,输入完命令调出来的结果里没有代理相关的内容,这个是什么情况?难道是群晖的docker和一般Linux系统的docker配置文件路径不一样不成

使用 docker info 命令查看一下代理配置是否生效,记得配置完代理后重启一下docker服务。其次确认一下代理服务是否启动成功?可以按这两个方向排查一下,实在不用用 tcpdump 抓包排查一下。

你说的我都执行过了,保存完代理配置文件以后在群晖套件中心停用docker服务,然后重新启用,然后输入docker info,输出的结果里没有有关代理设置的任何信息。

这里说的套件中心我没有用过,不太熟悉,看能否在终端里执行上面的这一切

389377616 commented 4 months ago

我查到原因了,群晖的系统和一般Linux系统不一样,是魔改过他的路径是/etc/systemd/system/pkg-Docker-dockerd.service.d,