写在前面
自从docker
站点大范围挂了之后,使用科学上网也拉不到镜像。今天花时间研究了一下,特此记录一下。
一、解决 docker pull 不下来镜像
docker ci
命令是走守护进程网络的,而守护进程在Ubuntu
上是给systemctl
管理的,所以只需要给这个守护进程单独设置网络代理即可
前提条件:有个科学上网环境,假设ip
是127.0.0.1
,端口是7890
- 创建
docker
守护进程设置文件夹mkdir /etc/systemd/system/docker.service.d
- 创建守护进程网络代理文件
vi /etc/systemd/system/docker.service.d/proxy.conf
- 在新创建的
proxy.conf
文件中添加以下内容[Service] Environment="HTTP_PROXY=http://127.0.0.1:7890" Environment="HTTPS_PROXY=http://127.0.0.1:7890" Environment="NO_PROXY=localhost,127.0.0.1"
- 验证代理设置
systemctl show --property=Environment docker
- 刷新
systemctl
列表sudo systemctl daemon-reload
- 重启
docker
守护进程sudo systemctl restart docker
到此为止就可以愉快使用docker pull
了
二、解决 docker 内容器不能访问某些网络
docker
容器内部是一个个的user
,网络权限在docker > user
上,只需要设置容器级别的网络代理就可以。
前提条件:
-
有个科学上网环境,假设
ip
是192.168.50.27 或 127.0.0.1
,端口是7890
-
假设本机的内网ip地址是
192.168.50.27
-
打开
docker
配置文件,没有就新建vi ~/.docker/config.json
-
追加以下内容(如果你的文件中有内容,最外层的大括号需要删掉,从
"proxies"
开始){ "proxies": { "default": { "httpProxy": "http://192.168.50.27:7890", "httpsProxy": "http://192.168.50.27:7890", "noProxy": "localhost,127.0.0.1" } } }
-
重启
docker
守护进程(本质上是批量重启了所有容器,让容器都应用了这个代理规则),也可以不重启,那样只有新启动的容器才会生效sudo systemctl restart docker
完事收工
评论区