docker-set-proxy

Linux使用代理

socks5适用于本地能解析目标主机但速度慢的情况,而socks5h则用于本地无法解析目标主机时,由代理服务器进行解析。

# curl使用代理
curl -x socks5h://127.0.0.1:1080 www.baidu.com

docker proxy设置

docker search因index.docker.io无法访问,需要配置代理才能使用。

docker search centos
Error response from daemon: Get "https://index.docker.io/v1/search?q=centos&n=25": dial tcp 108.160.166.9:443: connect: connection timed out
     Just put this content (change IP and port if needed) into ~/.docker/config.json (notice that the protocol is socks5h)

    {
        "proxies":
        {
            "default":
            {
                "httpProxy": "socks5h://172.17.0.1:3128",
                // or "httpProxy": "socks5h://localhost:3128", with --network=host
                "httpsProxy": "socks5h://172.17.0.1:3128",
                "noProxy": ""
            }
        }
    }

dockerd/docker pull代理

docker pull时,是由守护进程dockerd来执行,需要配置到dockerd中,在systemd或daemon.json中配置。


{
  "registry-mirrors": [
    "https://docker.13140521.xyz"
  ],
  "proxies": {
    "http-proxy": "socks5h://192.168.31.103:2222",
    "https-proxy": "socks5h://192.168.31.103:2222",
    "no-proxy": "*.13140521.xyz,127.0.0.1,localhost,.local,10.10.0.0/8,172.16.0.0/12,192.168.0.0/16"
  }
}

container代理

在容器运行阶段,如果需要代理上网,需要配置~/.docker/config.json或运行时通过-e注入http_proxy环境变量,需要docker 17.07以上版本。

docker run --rm alpine sh -c 'env | grep -i  _PROXY'

# 输出
HTTPS_PROXY=https://proxy.example.com:3129
no_proxy=*.test.example.com,.example.org,127.0.0.0/8
NO_PROXY=*.test.example.com,.example.org,127.0.0.0/8
https_proxy=https://proxy.example.com:3129
http_proxy=http://proxy.example.com:3128
HTTP_PROXY=http://proxy.example.com:3128

docker build代理

用--build-arg参数注入http_proxy。

不要在Dockerfile中使用ENV指令配置构建过程中使用到的代理配置,镜像创建的容器可能访问不到代理、产生难以理解的网络错误,或者引起代理敏感信息泄漏。