首页 > 其他分享 >docker各种代理设置(3)

docker各种代理设置(3)

时间:2024-11-22 09:17:40浏览次数:1  
标签:http -- 代理 8118 build 设置 docker proxy

docker pull的代理设置(docker daemon proxy)

docker pull拉取国外的镜像时可能会很慢或者会直接失败,这时需要为docker pull操作设置代理,或者修改镜像源为国内可访问的镜像源。

但是要注意,docker pull命令只是向docker daemon服务发送pull操作请求的,实际执行pull操作的是docker daemon进程(dockerd)。因此想要加速docker pull拉取过程,应当配置docker daemon的代理。

有两种配置方式:

  • 配置dockerd服务启动时的环境变量
  • 配置daemon.json配置文件

daemon.json

docker的daemon.json配置文件默认路径位于:

  • /etc/docker/daemon.json
  • ~/.config/docker/daemon.json

当然,也可使用dockerd --config-file明确指定daemon.json的路径。

在daemon.json文件中添加如下代理内容:

{
  "proxies": {
    "http-proxy": "http://192.168.200.1:8118",
    "https-proxy": "http://192.168.200.1:8118",
    "no-proxy": "192.168.0.0/16,127.0.0.0/8"
  }
}

然后重启docker:

systemctl restart docker

配置dockerd的环境变量

假如使用的是systemd管理dockerd的服务,那么修改服务配置文件/usr/lib/systemd/system/docker.service,在[Service]段落添加几个Environment字段即可。

下面是默认的docker.service添加Environment字段后的内容:

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service containerd.service time-set.target
Wants=network-online.target containerd.service
Requires=docker.socket

[Service]
Environment="HTTP_PROXY=http://192.168.200.1:8118"
Environment="HTTPS_PROXY=http://192.168.200.1:8118"
Environment="NO_PROXY=localhost,127.0.0.1"
Type=notify
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
OOMScoreAdjust=-500

[Install]
WantedBy=multi-user.target

修改docker.service之后,需要重载,然后重启:

systemctl daemon-reload
systemctl restart docker

docker build的代理设置

有时候在构建Dockerfile时,Dockerfile中的某些指令需要使用代理。

例如,当在Dockerfile中指定RUN npm install指令时,那么在docker build构建过程中,运行到npm install命令时可能会卡住,这时就需要为npm设置代理才能比较快地安装npm包。

要为docker build设置代理,有两种方式:

  • ~/.docker/config.json文件中设置代理。参考如下config.json文件内容:

    {
     "proxies": {
       "default": {
         "httpProxy": "http://proxy.example.com:3128",
         "httpsProxy": "https://proxy.example.com:3129",
         "noProxy": "*.test.example.com,.example.org,127.0.0.0/8"
       }
     }
    }
    
  • docker build命令中使用--build-arg选项来设置HTTP_PROXY HTTPS_PROXY代理环境变量。例如:

    docker build . -f Dockerfile -t hexo:v0.1 \
      --build-arg HTTP_PROXY='http://192.168.200.1:8118' \
      --build-arg HTTPS_PROXY='http://192.168.200.1:8118'
    

需要注意的是,docker build的过程是在容器中执行操作的,因此如果网络代理的地址是127.0.0.1,将会使用容器内部网络栈的环回地址127.0.0.1,而不是宿主机中的127.0.0.1。因此无论是将代理写入配置文件config.json还是使用--build-arg指定代理,docker build命令行中都应该添加--network host

# 如果config.json中的代理地址是127.0.0.1,则加上 --network host
docker build . --network host -f Dockerfile -t hexo:v0.1

# 如果通过 --build-arg 指定代理,也加上 --network host
docker build . --network host -f Dockerfile -t hexo:v0.1 \
  --build-arg HTTP_PROXY='http://127.0.0.1:8118' \
  --build-arg HTTPS_PROXY='http://127.0.0.1:8118'

但无论何时使用docker命令,只要存在网络问题,都建议在当前shell环境下设置好http_proxy https_proxy环境变量:

export http_proxy=http://127.0.0.1:8118 https_proxy=http://127.0.0.1:8118

比如,docker build有时候一直卡在加载元素据过程,随后就报错,这时只有在shell环境下设置环境变量才有效:

ERROR: failed to solve: node: failed to authorize: failed to fetch oauth token: Post "https://auth.docker.io/token": dial tcp 104.244.46.71:443: connect: connection refused

docker容器运行时的代理设置

容器运行时,可能需要为容器进程设置一个代理。

也有两种设置方式:

要为docker build设置代理,有两种方式:

  • ~/.docker/config.json文件中设置代理。参考如下config.json文件内容:

    {
      "proxies": {
        "default": {
          "httpProxy": "http://proxy.example.com:3128",
          "httpsProxy": "https://proxy.example.com:3129",
          "noProxy": "*.test.example.com,.example.org,127.0.0.0/8"
        }
      }
    }
    
  • docker run命令中使用--env选项来设置HTTP_PROXY HTTPS_PROXY代理环境变量。例如:

    docker build . -f Dockerfile -t hexo:v0.1 \
      --env HTTP_PROXY='http://192.168.200.1:8118' \
      --env HTTPS_PROXY='http://192.168.200.1:8118'
    

但无论何时使用docker命令,只要存在网络问题,都建议在当前shell环境下设置好http_proxy https_proxy环境变量:

export http_proxy=http://127.0.0.1:8118 https_proxy=http://127.0.0.1:8118

标签:http,--,代理,8118,build,设置,docker,proxy
From: https://www.cnblogs.com/hflinux/p/18562031

相关文章

  • Kubernetes集群升级Docker版本
    在Kubernetes集群中,Docker作为容器运行时,对其版本的升级需要格外小心,以免影响集群的正常运行。本文将介绍如何在Kubernetes集群中安全地升级Docker版本。注意事项:请在业务低峰期进行升级,避免影响业务升级后需要重启节点,才能拿到新版本的指标升级步骤1.离线升......
  • Cocos Creator引擎开发:物理引擎使用_物理世界的设置与调试
    物理世界的设置与调试在CocosCreator中,物理引擎是模拟现实世界物理规律的关键组件,它可以帮助开发者实现逼真的物理效果,如碰撞检测、刚体运动、关节连接等。本节将详细介绍如何在CocosCreator中设置和调试物理世界,包括物理世界的初始化、物理材质的设置、物理关节的使用以......
  • JFrame对象设置
     JFrame对象设置 publicclassHelloWorld{publicstaticvoidmain(String[]args){//创建窗体对象JFramejFrame=newJFrame();//设置窗体大小//jFrame.setSize(600,400);//设置窗体全屏展示......
  • JAVA 静态代理 & 动态代理
    Java中,代理模式是一种常见的设计模式,用于为某对象提供一种代理,以控制对该对象的访问。根据代理类的实现方式,可以分为静态代理和动态代理。以下将分别介绍这两种方式,并进行对比分析。静态代理静态代理是指在编译时期就已经确定了代理类的实现。代理类需要实现与目标对象相同的接......
  • 新手使用代理ip介入代码怎么写?
    Python语言(使用requests库为例)在上述代码中:首先导入了requests库,它是Python中常用的用于发送HTTP请求的库。然后定义了一个字典格式的proxy变量,用于配置代理IP的相关信息,分别针对http和https协议指定代理的地址和端口(这里的http://和https://要按照你获取的代理的实际协议情......
  • vue2-代理服务器&插槽
    解决跨域问题配置代理服务器代理服务器位于前端应用(客户端)和真实的后端服务器之间。当配置了代理服务器后,前端应用的请求不再直接发送到后端服务器,而是发送到代理服务器。代理服务器在接收到请求后,会根据预先配置的规则将请求转发到真正的后端服务器。例如,在Vue项目的开发服......
  • 如何设置绘制一个对话框,对话框随内容自适应宽度
    <Canvas><TextBlockx:Name="stitchOverTopTextBlock"FontFamily="MicrosoftYaHei"Text="好好学习天天向上"SizeChanged="stitchOverTopTextBlock_SizeChanged"Panel.ZIndex="1"Foreground=&qu......
  • SAP B1 重要单据字段介绍 - 常规设置(一)
    目录背景一、业务伙伴1.客户活动限制2.佣金设置依据3.审批流程4.默认值设定5.付款条件首选项6.其他设定7.一揽子协议背景在新建账套时往往需要对【常规设置】单据进行个性化定义,维护界面语言和颜色、新业务伙伴的缺省值、预算管理等常规设置。本系列文章将......
  • 软件设计模式————(代理模式)
    [实验任务一]:婚介所婚介所其实就是找对象的一个代理,请仿照我们的课堂例子“论坛权限控制代理”完成这个实际问题,其中如果年纪小于18周岁,婚介所会提示“对不起,不能早恋!”,并终止业务。实验要求:1.提交类图; 2.提交源代码;复制代码1packagetutorial14;23importjav......
  • PATH 命令用于显示或设置可执行文件的搜索路径,帮助操作系统或命令行环境找到你需要运
    path|MicrosoftLearnC:\Users\Administrator>PATH/?为可执行文件显示或设置一个搜索路径。PATH[[drive:]path[;...][;%PATH%]PATH;键入PATH;清除所有搜索路径设置并指示cmd.exe只在当前目录中搜索。键入PATH但不加参数,显示当前路径。将%PATH%包括在新的路径......