加速访问 Docker 注册表
使用镜像的方式加速 Docker Hub 访问速度
如果只是需要更流畅的访问 Docker Hub,可以使用 镜像 的方式。
下面展示使用上海交通大学 Docker Hub 镜像的例子。
编辑或新建 /etc/docker/daemon.json 文件,向其中添加 registry-mirrors 项,填入一个列表:
使用代理的方式加速所有 Docker 注册表
如果需要访问其他的 Docker 注册表地址,例如我当前正在使用的 devcontainer 会使用到微软的 Docker 注册表,那即使修改了 Docker Hub 镜像地址也没有用。为了能够快速访问,需要给 Docker 守护进程设置代理。
对于 Docker Engine 23.0 版本以上
对于 Docker Engine 23.0 版本以上的,可以在 /etc/docker/daemon.json(如果没有的话可以手动创建) 中配置。
填入下述内容:
对于常规安装方式
-
给
docker服务创建一个放置 systemd 的目录:1sudo mkdir -p /etc/systemd/system/docker.service.d -
创建 /etc/systemd/system/docker.service.d/http-proxy.conf 文件添加 HTTP 代理:
-
如果有需要在不使用代理的情况下访问 Docker 注册表,可以使用
NO_PROXY环境变量。我个人是不需要添加此项,如果有需要的话建议还是看看文末的官方文档吧,因为一些特殊字符需要转义才能使用。 -
刷新更改并重启 Docker:
-
验证修改成功应用:
1sudo systemctl show --property=Environmehttps://docs.docker.com/network/proxy/#configure-the-docker-clientnt docker返回类似下述内容表示修改成功:
1Environment=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;第五步的命令则是:
|
|
代理容器内网络请求
-
创建并编辑 ~/.docker/config.json 文件,填入下述内容:
保存文件后会立刻生效,不需要重启 Docker。但是,这个配置不会作用于已有的容器,只会作用于新容器和构建。
如果要代理 ftp 请求,需要指定
ftpProxy项;此外,还可以使用allProxy代理所有请求。 -
验证配置:
2.1. 方式一:
1docker run --rm alpine sh -c 'env | grep -i _PROXY'返回如下:
2.2. 方式二(如果在国内使用境外代理):
1docker run -it --rm curlimages/curl google.com
为 Docker CLI 设置代理
可以在调用 docker build 和 docker run 时在命令行上设置代理。
例如在使用 docker build 时,添加 --build-arg 参数:
|
|
在使用 docker run 时,指定 --env 参数:
|
|