终端科学上网说明
配置好科学上网后,网页能科学上网
为了在终端科学上网,需要配置代理(修改环境变量为 VPN 的指定端口)
1
2export HTTP_PROXY="http://127.0.0.1:7897/"
export HTTPS_PROXY="http://127.0.0.1:7897/"确认一下 Ubuntu 终端已经科学上网,即已经配置下面的情况
1
2
3
4echo $HTTP_PROXY
http://127.0.0.1:7897/
echo $HTTPS_PROXY
http://127.0.0.1:7897/- 从输出可以看到,终端已经配置了代理(
HTTP_PROXY和HTTPS_PROXY均指向http://127.0.0.1:7897/)
- 从输出可以看到,终端已经配置了代理(
此时在终端执行
curl能成功1
curl https://www.google.com
- 注意此时用
ping命令不一定能成功,因为 ping 使用的是 ICMP 协议
- 注意此时用
综上已经确定了终端可以科学上网
特别注意:一般来说终端的代理配置仅对当前终端会话生效 ,除非把环境变量配置添加到
~/.bashrc文件
docker 的问题
- 通过网页访问 docker 核心库没问题(有返回没验证的说明就是 OK 的)
- Docker 服务默认不会继承终端的代理环境变量 ,这常常是 Docker 拉取镜像仍失败的关键原因
- 需要将代理配置同步给 Docker 服务,确保 Docker 能通过代理访问镜像仓库
为 Docker 配置代理(确保与终端代理一致)
第一步:创建 Docker 代理配置文件
- Docker 服务的代理配置需通过专门的系统目录(
/etc/systemd/system/docker.service.d/)生效,执行以下命令创建配置文件:1
2
3
4
5# 创建配置目录(若不存在)
sudo mkdir -p /etc/systemd/system/docker.service.d
# 创建代理配置文件
sudo nano /etc/systemd/system/docker.service.d/proxy.conf
第二步:写入代理配置(与终端代理保持一致)
在
proxy.conf文件中添加以下内容(注意代理地址127.0.0.1:7897需与你终端的HTTP_PROXY完全一致,包括结尾是否带/):1
2
3
4[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7897/"
Environment="HTTPS_PROXY=http://127.0.0.1:7897/"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.local.golang.org,.docker.internal"NO_PROXY:指定无需代理的地址(避免本地服务/容器间通信走代理,防止冲突),无需修改
第三步:重启 Docker 服务,使代理生效
1
2
3
4
5
6
7
8
# 重新加载 systemd 配置(识别新的 proxy.conf)
sudo systemctl daemon-reload
# 重启 Docker 服务
sudo systemctl restart docker
# 验证 Docker 是否加载了代理配置
sudo systemctl show --property=Environment docker
* 若输出中包含 `HTTP_PROXY=http://127.0.0.1:7897/` 和 `HTTPS_PROXY=http://127.0.0.1:7897/`,说明 Docker 代理配置成功
再次尝试拉取 Docker 镜像
- 现在 Docker 已通过代理访问外部仓库,执行拉取命令:
1
2
3
4
5# 先测试小镜像 hello-world,验证代理是否生效
sudo docker pull hello-world
# 若 hello-world 成功,再拉取目标镜像
sudo docker pull xxx