docker各种代理设置(3)

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
posted @ 2024-11-22 09:28  还得多长时间·  阅读(4)  评论(0编辑  收藏  举报
//雪花飘落效果