写在前面
自从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
完事收工

评论区