总所周知,docker pull 在国内是用不了的。国内的各种镜像也都陆续下线。背后有一股神秘力量。但是最新的技术很多都是 docker 形式发布的。怎么拉取呢?
技巧一:
如果有离线 docker 镜像,直接加载。
# 保存镜像为文件
docker save tomcat:8 -o docker-io-tomcat-8.tar
# 加载离线镜像
docker load -i docker-io-tomcat-8.tar
注意 docker load
不支持 *
,只能一个一个加载。
技巧二:
如果有非官方的 docker 源可以用,可以直接拉取,然后再重命名。
# 拉取第三方镜像
docker pull somehost.com/abc/nginx
# 重命名
docker tag somehost.com/abc/nginx nginx
注意 docker load
不支持 *
,只能一个一个加载。
技巧三:
设置代理。修改 docker.service
。ubuntu 位置在 /etc/systemd/system/multi-user.target.wants/
。centos 可能在 /etc/systemd/system/
。
[Service]
Environment="HTTP_PROXY=http://192.168.0.100:11751"
Environment="HTTPS_PROXY=http://192.168.0.100:11751"
Environment="NO_PROXY=your-registry.com,10.10.10.10,*.example.com,192.168.0.1/24,"
技巧四:
设置断点续传。因为神秘力量的原因,代理很可能是不稳定的,会时断时连。因此开断点续传是很必要的。文件位置:/etc/docker/daemon.json
。
{
"features": {"containerd-snapshotter": true}
}
然后 systemctl restart docker
重启 docker。
警告:修改配置文件后,docker 可能会出现 image, container 丢失的问题。在我的 windows 研发机上是这样的。不确定是不是必现的。修改前做好数据备份。
技巧五:
修改代理。有的代理默认只绑定 127.0.0.1
,其他机器是用不了的,需要改成其他 IP。例如,修改 C:\Users\用户名\AppData\Roaming\代理软件名\settings.yaml
,修改绑定的地址,然后重启服务:
addr: 192.168.0.100:11751
socksAddr: 192.168.0.100:11754
不同的代理有不同的设置方法,根据实际情况修改。
技巧六:
命令行设置代理:
# curl 使用代理保存文件。-x 参数。
curl -O https://somehost/somefile.tgz -x 192.168.0.100:11751
# wget 使用代理保存文件。-e 参数。
wget -e "http_proxy=http://127.0.0.1:8087" http://somehost/somefile.tgz
技巧七
对于 python,很多类库都会调用系统代理设置。如果是 ubuntu,可以再系统图像界面里设置,网络设置里。
经常在终端运行命令的时候遇到代理问题 unknown scheme for proxy url url socks 之类。
解决方法一,禁用代理:unset all_proxy; unset ALL_PROXY
解决办法二,代理设置里不要设置 sockets 代理,因为 python 不支持。只保留 https、http 代理。