关于docker无法访问仓库的镜像代理问题
解决的办法有以下及几种
1. 修改镜像源,改成国内的镜像地址
注意: docker pull时修改系统的代理不会让docker pull走系统代理,docker pull 的代理被 systemd 接管,所以需要设置 systemd...,docker build/run 的代理参考方法2
# 创建以下文件
vim /etc/docker/daemon.json
编辑模式输入以下内容
{
"registry-mirrors":[
"https://docker.1panel.live",
"https://docker.anyhub.us.kg",
"https://dockerhub.icu"
]
}
或者
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
修改完以后按以下命令生效配置
systemctl daemon-reload
systemctl restart docker
2 设置为docker提供代理
设置 docker 全局代理
设置方法参考官方文档: https://docs.docker.com/network/proxy/
注意新版和旧版本(17.07以前)设置方法不一样,比旧版更简单而且不需要重启服务,网上文章基本都是针对旧版本的,可能未来又变化了,所以多看官方文档~
以及这种设置方法只对 build 和 run 的容易有用, docker pull 要按照2.1的方法设置,注意这是容器内部的代理
vim ~/.docker/config.json
{
"proxies":
{
"default":
{
"httpProxy": "http://172.17.0.1:8123",
"httpsProxy": "http://172.17.0.1:8123",
"noProxy": "localhost,127.0.0.1,.daocloud.io"
}
}
}
这样设置后,build和run都会将http_proxy和https_proxy ftp_proxy变量设置成对应的代理地址,如果你在容器里面不想使用这个代理了,需要export http_proxy= 和 export https_proxy= 将两个变量设置为空
2.1 docker pull代理设置
创建
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
输入以下内容
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:8123"
Environment="HTTPS_PROXY=http://127.0.0.1:8123"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
这里的127.0.0.1是直接用了本机的 http 代理,然后重启服务才能生效
sudo systemctl daemon-reload
sudo systemctl restart docker
可以通过sudo systemctl show --property=Environment docker看到设置的环境变量。
然后docker pull就会使用代理啦!