• 亮色
  • 暗色
  • 跟随系统
找到 [[ searchResult.results.length ]] 条结果 Search by Fuse.js

Docker Engine 代理设置

加速访问 Docker 注册表

使用镜像的方式加速 Docker Hub 访问速度

如果只是需要更流畅的访问 Docker Hub,可以使用 镜像 的方式。

下面展示使用上海交通大学 Docker Hub 镜像的例子。

编辑或新建 /etc/docker/daemon.json 文件,向其中添加 registry-mirrors 项,填入一个列表:

1
2
3
{
  "registry-mirrors": ["https://docker.mirrors.sjtug.sjtu.edu.cn"]
}

使用代理的方式加速所有 Docker 注册表

如果需要访问其他的 Docker 注册表地址,例如我当前正在使用的 devcontainer 会使用到微软的 Docker 注册表,那即使修改了 Docker Hub 镜像地址也没有用。为了能够快速访问,需要给 Docker 守护进程设置代理。

对于 Docker Engine 23.0 版本以上

对于 Docker Engine 23.0 版本以上的,可以在 /etc/docker/daemon.json(如果没有的话可以手动创建) 中配置。

填入下述内容:

1
2
3
4
5
6
7
{
  "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"
  }
}

对于常规安装方式

  1. docker 服务创建一个放置 systemd 的目录:

    1
    
    sudo mkdir -p /etc/systemd/system/docker.service.d
    
  2. 创建 /etc/systemd/system/docker.service.d/http-proxy.conf 文件添加 HTTP 代理:

    1
    2
    3
    
    [Service]
    Environment="HTTP_PROXY=http://proxy.example.com:3128"
    Environment="HTTPS_PROXY=https://proxy.example.com:3129"
    
  3. 如果有需要在不使用代理的情况下访问 Docker 注册表,可以使用 NO_PROXY 环境变量。我个人是不需要添加此项,如果有需要的话建议还是看看文末的官方文档吧,因为一些特殊字符需要转义才能使用。

  4. 刷新更改并重启 Docker:

    1
    2
    
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
  5. 验证修改成功应用:

    1
    
    sudo systemctl show --property=Environmehttps://docs.docker.com/network/proxy/#configure-the-docker-clientnt docker
    

    返回类似下述内容表示修改成功:

    1
    
    Environment=HTTP_PROXY=http://proxy.example.com:3128 HTTPS_PROXY=https://proxy.example.com:3129 NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp
    

对于非 root 用户安装方式

类似常规安装,但是第一步的目录路径修改为 ~/.config/systemd/user/docker.service.d;第四步无需指定 sudo;第五步的命令则是:

1
systemctl --user show --property=Environment docker

代理容器内网络请求

  1. 创建并编辑 ~/.docker/config.json 文件,填入下述内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    {
    "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。但是,这个配置不会作用于已有的容器,只会作用于新容器和构建。

    如果要代理 ftp 请求,需要指定 ftpProxy 项;此外,还可以使用 allProxy 代理所有请求。

  2. 验证配置:

    2.1. 方式一:

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

    返回如下:

    1
    2
    3
    4
    5
    6
    
    https_proxy=http://proxy.example.com:3129
    HTTPS_PROXY=http://proxy.example.com:3129
    http_proxy=http://proxy.example.com:3128
    HTTP_PROXY=http://proxy.example.com:3128
    no_proxy=*.test.example.com,.example.org,127.0.0.0/8
    NO_PROXY=*.test.example.com,.example.org,127.0.0.0/8
    

    2.2. 方式二(如果在国内使用境外代理):

    1
    
    docker run -it --rm curlimages/curl google.com
    

为 Docker CLI 设置代理

可以在调用 docker builddocker run 时在命令行上设置代理。

例如在使用 docker build 时,添加 --build-arg 参数:

1
docker build --build-arg HTTP_PROXY="http://proxy.example.com:3128" .

在使用 docker run 时,指定 --env 参数:

1
docker run --env HTTP_PROXY="http://proxy.example.com:3128" redis

参考

作者
发布日期
版权协议
WTFPL