Contents

Docker Proxy

Contents

在命令行中输入 docker 命令会涉及多少个代理阶段呢?答案是3个

  1. docker -> docker daemon

    docker是一个客户端,它可以通过网络访问多个daemon,不一定是本机。docker在访问daemon时会使用标准的$http_proxy/$https_proxy环境变量

  2. docker daemon -> docker hub/other

    docker daemon访问外网时,如果需要proxy,需要这样配置。

     {
       "proxies": {
         "http-proxy": "http://proxy.example.com:3128",
         "https-proxy": "https://proxy.example.com:3129",
         "no-proxy": "*.test.example.com,.example.org,127.0.0.0/8"
       }
     }
    
  3. docker container

    如果docker builddocker run时,容器自己还可能需要访问网络,这个在这里配置。需要创建一个 ~/.docker/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"
        }
      }
     }
    

注意 这两个json文件是不太一样的,尤其是一个是 snake-case,另一个是 camelCase