docker配置国内源和代理,以及如何让容器通过代理上网
docker配置国内源和代理,以及如何让容器通过代理上网
阅读原文
建议阅读原文,始终查看最新文档版本,获得最佳阅读体验:《docker配置国内源和代理,以及如何让容器通过代理上网》
https://alidocs.dingtalk.com/i/nodes/4lgGw3P8vRmaK2mGcddjar9b85daZ90D
配置docker镜像仓库和代理
参考资料:Daemon proxy configuration | Docker Docs
我发现直接用docker拉取镜像会失败,如下图:

为了解决网络的问题,我想着可以设置代理,需要注意的是,docker有自己的代理设置,并不是在linux系统中设置就行了
特别注意:如果同时配置镜像仓库和代理,则中间的逗号不要忘记加,否则重启docker服务时会报错
下面的这个方法,只是让docker能通过代理拉取镜像,容器并不会通过代理上网,若想要让容器通过代理上网,一般是要在运行容器时,添加环境变量,详情请看:《docker配置国内源和代理,以及如何让容器通过代理上网》
sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.daocloud.io",
"https://docker.1panel.dev",
"https://registry.dockermirror.com"
],
"proxies": {
"http-proxy": "http://<此处替换为你的代理服务器ip和端口号>",
"https-proxy": "http://<此处替换为你的代理服务器ip和端口号>",
"no-proxy": "fe80::/10,::1/128,10.0.0.0/8,192.168.0.0/16,127.0.0.1,172.16.0.0/12,.svc,localhost,.dltornado2.com,.security.ubuntu.com,.aliyuncs.com"
}
}
EOF
sudo systemctl restart docker
但是我发现仍然无法正常拉取镜像,如下图:

代理服务器配置肯定没有问题,我用另外一台Windows虚拟机,是可以正常代理上网的。
终极解决方案:
我发现我把"https-proxy": "https://<此处替换为你的代理服务器和端口号>",改为"https-proxy": "http://<此处替换为你的代理服务器和端口号>", 就正常了
关键是https-proxy的值,是http而不是https
sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
"proxies": {
"http-proxy": "http://<此处替换为你的代理服务器和端口号>",
"https-proxy": "http://<此处替换为你的代理服务器和端口号>",
"no-proxy": "localhost,127.0.0.1"
}
}
EOF
sudo systemctl restart docker
速度很快,比用免费的容器镜像加速器要快


让容器通过代理上网
有时候我们想要让容器也能通过代理上网,比如有些情况下,容器需要访问github、Google网站等等,国内访问要么不稳定,要么完全无法访问。
很简单,只需要添加环境变量即可。下面是一个示例:
注意:即使在/etc/environment文件中添加相应的环境变量,容器仍然不会通过代理上网,必须要像下面的示例命令所示,运行docker容器时,指定有关的环境变量,才能使得容器通过代理上网
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-e GENERIC_TIMEZONE="Asia/Shanghai" \
-e TZ="Asia/Shanghai" \
-e N8N_SECURE_COOKIE=false \
-e N8N_HOST=n8n.dltornado2.com \
-e N8N_RUNNERS_ENABLED=true \
-e http_proxy="http://<此处替换为你的代理服务器和端口号>" \
-e https_proxy="http://<此处替换为你的代理服务器和端口号>" \
-e no_proxy="fe80::/10,::1/128,10.0.0.0/8,192.168.0.0/16,127.0.0.1,172.16.0.0/12,.svc,localhost,.dltornado2.com,.security.ubuntu.com,.aliyuncs.com" \
-e HTTP_PROXY="http://<此处替换为你的代理服务器和端口号>" \
-e HTTPS_PROXY="http://<此处替换为你的代理服务器和端口号>" \
-e NO_PROXY="fe80::/10,::1/128,10.0.0.0/8,192.168.0.0/16,127.0.0.1,172.16.0.0/12,.svc,localhost,.dltornado2.com,.security.ubuntu.com,.aliyuncs.com" \
-v n8n_data:/home/node/.n8n \
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/n8nio/n8n:1.101.2
关于作者和DreamAI
关注微信公众号“AI发烧友”,获取更多IT开发运维实用工具与技巧,还有很多AI技术文档!

文档介绍docker配置国内源和代理,及让容器通过代理上网的方法。配置镜像仓库和代理需注意逗号,https-proxy值用http。让容器上网需运行时指定环境变量,含各类代理变量。

浙公网安备 33010602011771号