docker设置代理解决内网pull外网镜像

这篇具有很好参考价值的文章主要介绍了docker设置代理解决内网pull外网镜像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

Docker 配置代理的缘由

通过dockerd配置实现代理

通过container配置实现代理

参考文献


Docker 配置代理的缘由

        如何在内网环境内环境内Pull外网registry,或者反过来想要Pull公司Registry镜像?存在上述需求的朋友可以尝试以下方法进行docker代理配置。其中配置dockerd代理的方式遇到了些坑,即解决了通过配置文件docker.service.d/http-proxy.conf代理无效的问题。先来回顾下docker的架构设计。

        Docker并非是一个通用的容器工具,它依赖于已存在并运行的Linux内核环境Docker基于客户端-服务器架构,客户端与 Docker 守护进程通信,服务端负责构建、运行和分发Docker容器等繁重的工作。Docker 客户端和守护进程可以运行在同一个系统上,也可以连接到一个远程 Docker 守护进程。两者通过 UNIX 套接字或网络接口使用 REST API 进行通信。【以上引自:Docker简要教程 - 知乎 (zhihu.com)】

docker设置代理解决内网pull外网镜像,Docker,docker,容器,运维

        综上,docker配置网络代理需要在其守护进程dockerd的启动环境中,而无法通过操作系统本身的环境变量实现代理配置。下述主要介绍两种方法实现docker代理。

通过dockerd配置实现代理

  目前常见的方法是通过systemd service设置docker代理,具体步骤如下:

# 创建/etc/systemd/system/docker.service.d路径
sudo mkdir -p /etc/systemd/system/docker.service.d
# 创建 http-proxy.conf
sudo touch /etc/systemd/system/docker.service.d/http-proxy.conf
# 写入配置
vim /etc/systemd/system/docker.service.d/http-proxy.conf
# 粘贴下方配置代理并wq退出
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

  配置完成后需要重启docker服务以使其生效:

sudo systemctl daemon-reload 
sudo systemctl restart docker

  问题是我这样设置后代理并未成功,经过如下设置后才配置成功:

# edit config file
cd /lib/systemd/system && sudo vim docker.service
# add proxy setting
Environment=HTTP_PROXY=http://user:password@10.70.80.900:8080/
Environment=HTTPS_PROXY=http://user:password@10.70.80.900:8080/
Environment=NO_PROXY=localhost, 127.0.0.1, ::1, 10.9*

        前面配置未生效的原因不确定,分析原因可能和systemd的配置文件相关,但理论上通过/etc/systemd/system的配置优先级高会覆盖/lib/systemd/system,但事实并未覆盖。小弟Linux系统了解比较浅,下方引用了systemd的参考文献,这个问题可供大家一起探讨。

        在一般的使用场景下,每一个 Unit(服务等) 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit 。systemd 的使用大幅提高了系统服务的运行效率, 而 unit 的文件位置一般主要有三个目录:

  • /lib/systemd/system
  • /run/systemd/system
  • /etc/systemd/system

        这三个目录的配置文件优先级依次从高到低,如果同一选项三个地方都配置了,优先级高的会覆盖优先级低的。​​​​​​​系统安装时,默认会将 unit 文件放在/lib/systemd/system目录。如果我们想要修改系统默认的配置,比如nginx.service,一般有两种方法:

  • /etc/systemd/system目录下创建nginx.service文件,写入
  • /etc/systemd/system​​​​​​​下面创建nginx.service.d目录,在目录里创建.conf 文件写入配置

    块引自:/etc/systemd/system 和 /lib/systemd/system 的区别 - 知乎 (zhihu.com)

通过container配置实现代理

  相当于在启动的container内设置环境变量,最简单的方法是在创建容器时添加环境变量env:

docker run -d --env HTTP_PROXY="http://user:psd@ip:port" --env HTTPS_PROXY="http://user:psd@ip:port" --name test_container image:v0.0.1

  另个方法是配置~/.docker/config.json文件:

# cat ~/.docker/config.json
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://127.0.0.1:7890",
     "httpsProxy": "http://127.0.0.1:7890",
     "noProxy": "localhost"
   }
 }
}

   配置完成后需要重启docker服务以使其生效:

sudo systemctl daemon-reload 
sudo systemctl restart docker

参考文献

详解 Docker 的三种网络代理配置 - Roc's Blog (havemail.cn)

Docker 配置代理 - SnailRush - 博客园 (cnblogs.com)

Docker配置代理 - 码农教程 (manongjc.com)文章来源地址https://www.toymoban.com/news/detail-821470.html

到了这里,关于docker设置代理解决内网pull外网镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker pull 镜像太慢了,怎么解决?

    对于这样的情况,特别是遇到很大的容器,下载往往要等待很久,甚至会出现进度条停止下载卡死的情况。这都是docker hub目前被X导致的,速度提不起来; 解决方法: 输入如下内容: registry-mirrors:指定了一个镜像仓库的 URL,即 https://f1mcufij.mirror.aliyuncs.com。这个配置项用于

    2024年04月16日
    浏览(46)
  • docker pull拉取镜像失败问题解决

    docker pull Retrying in 1 second 问题解决办法: 使用阿里云加速器 1、首先进入阿里云的docker库https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 2、注册账号,并进入控制台管理; 3、选择镜像加速器选项,进入到镜像加速器选项,可以看到加速器地址,可以根据提示的修改步骤进行修

    2024年02月08日
    浏览(56)
  • Docker镜像下载加速及设置代理

    在使用docker pull拉镜像默认从docker hub里拉取,从国内访问这个网站速度可能会很慢。可以通过配置加速器解决。 登录阿里云控制台-搜索容器镜像服务-镜像工具-镜像加速器,即可看到加速器地址 通过修改daemon配置文件/etc/docker/daemon.json来使用加速器 登录华为云-搜索容器镜像

    2024年02月11日
    浏览(45)
  • docker国内镜像源配置及走代理设置

    同步发布在个人笔记docker国内镜像源配置及走代理设置 使用docker拉取镜像的时候,有时候会卡在中途死活下载不完。一般这种情况就是因为docker默认的镜像源是Dockerhub,而这个网站在域外。所以和Ubuntu换国内源一样,我们也可以对docker换国内镜像源。 docker的镜像源文件配置

    2024年04月26日
    浏览(31)
  • docker搭建minio服务器,解决内网穿透后外网无法访问问题

    搭建MinIo 内部搭建的MinIo服务器映射到外网后访问文件资源一直报认证异常,经资料查阅minio有自己一套加密校验逻辑,访问时不可改动其桶名 解决内网穿透minio访问异常问题 通过nginx进行代理,代理时不改变访问路径,外网映射时映射nginx的代理地址 修改Nginx配置

    2024年02月11日
    浏览(48)
  • docker换源(docker镜像源)pull超时(pull镜像超时)/etc/docker/daemon.json

    还是更换一下docker镜像源吧。 1. 打开终端并以管理员身份登录到Docker主机。 2. 编辑Docker配置文件 daemon.json 。该文件用于配置Docker守护进程的参数。 如果文件不存在,则创建一个新文件。 3. 在 daemon.json 文件中添加以下内容,将 镜像源地址 替换为您选择的镜像源地址: 请注

    2024年02月10日
    浏览(47)
  • 配置docker pull代理

    在执行 docker pull 时,是由守护进程 dockerd 来执行。因此,代理需要配在 dockerd 的环境中。而这个环境,则是受 systemd 所管控,因此实际是 systemd 的配置。 在这个 proxy.conf 文件(可以是任意 *.conf 的形式)中,添加以下内容: 在容器运行阶段,如果需要代理上网,则需要配置

    2024年02月04日
    浏览(28)
  • 使用代理加速docker pull

    docker pull 是由守护进程dockerd执行,因此代理需添加在dockerd的systemd配置中。 socks5://192.168.2.103:10808 替换为你的本地代理 参考 https://zhuanlan.zhihu.com/p/678307663

    2024年01月23日
    浏览(29)
  • Docker pull指定镜像架构

    Docker pull指定镜像架构 平时在docker pull 拉取一些官方镜像时,默认拉取到的是宿主机架构类型的镜像,例如在m1电脑上拉取到的是arm64架构的镜像,但是如何在pull时指定镜像架构呢,可以使用 --platform 选项 例: 在m1主机不使用–platform时 查看镜像架构 此时架构为arm64 使用–

    2024年02月05日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包