Docker加速下载镜像的配置指南
docker 加速下载
docker 下载会比较慢,即使挂了代理,在 Ubuntu 桌面环境的系统设置了启用网络代理(例如在 “Settings” -> “Network” -> “Network Proxy” 中设置的 HTTP/HTTPS 代理)也会很慢,这是因为代理并没有真正的生效,需要专门针对性的配置 docker 的代理。
原因如下:
- 独立的服务进程:Docker 守护进程 (
dockerd
) 是一个由systemd
管理的后台系统服务。它在系统启动时运行,通常以root
用户身份运行,并且不会继承你用户会话的环境变量。 - 环境变量隔离:即使你的 shell 终端里
echo $https_proxy
能看到代理设置,这个变量只存在于你的用户会话中,Docker 守护进程的运行环境中是看不到的。
1. 查询当前 Shell 会话的环境变量
这是查询当前用户命令行环境中代理设置的最直接方法。
# 查询 HTTP 代理
echo $HTTP_PROXY
# 或 (注意大小写,有时是小写)
echo $http_proxy# 查询 HTTPS 代理
echo $HTTPS_PROXY
# 或
echo $https_proxy# 查询不需要代理的地址列表
echo $NO_PROXY
# 或
echo $no_proxy
说明:
- 如果你在 Ubuntu 设置中配置了代理,并且该设置被正确应用到了你的用户会话(例如通过 GNOME 的
gsettings
),那么在你打开的终端中,这些环境变量通常会被自动设置。 - 这个设置只对当前终端及其启动的程序有效。
systemd
服务(如 Docker)通常不会读取这些变量。
2. 检查 Docker 守护进程的环境变量:
sudo systemctl show docker --property=Environment
如果输出是空的或者不包含 HTTP_PROXY
和 HTTPS_PROXY
,那就说明 Docker 守护进程没有配置代理。
如果方法 1 有输出,如:
erge@erge-Lenovo-Legion-Y7000-1060:~$ # 查询 HTTP 代理
erge@erge-Lenovo-Legion-Y7000-1060:~$ echo $HTTP_PROXY
http://127.0.0.1:7890/
erge@erge-Lenovo-Legion-Y7000-1060:~$ # 或 (注意大小写,有时是小写)
erge@erge-Lenovo-Legion-Y7000-1060:~$ echo $http_proxy
http://127.0.0.1:7890/
erge@erge-Lenovo-Legion-Y7000-1060:~$
erge@erge-Lenovo-Legion-Y7000-1060:~$ # 查询 HTTPS 代理
erge@erge-Lenovo-Legion-Y7000-1060:~$ echo $HTTPS_PROXY
http://127.0.0.1:7890/
erge@erge-Lenovo-Legion-Y7000-1060:~$ # 或
erge@erge-Lenovo-Legion-Y7000-1060:~$ echo $https_proxy
http://127.0.0.1:7890/
erge@erge-Lenovo-Legion-Y7000-1060:~$
erge@erge-Lenovo-Legion-Y7000-1060:~$ # 查询不需要代理的地址列表
erge@erge-Lenovo-Legion-Y7000-1060:~$ echo $NO_PROXY
localhost,127.0.0.0/8,::1
erge@erge-Lenovo-Legion-Y7000-1060:~$ # 或
erge@erge-Lenovo-Legion-Y7000-1060:~$ echo $no_proxy
localhost,127.0.0.0/8,::1
erge@erge-Lenovo-Legion-Y7000-1060:~$
而方法 2 没有输出,说明 Docker 守护进程没有配置代理。
配置 docker 的代理
上面已经查出了代理的设置,需要将其写入 docker 的配置文件中。
🔧 步骤 1:为 Docker 创建 systemd 代理配置文件
打开终端,执行以下命令:
# 创建配置文件目录
sudo mkdir -p /etc/systemd/system/docker.service.d# 创建并编辑代理配置文件
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
✏️ 步骤 2:写入代理配置
在打开的 http-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.0/8,::1,*.local,*.internal"
🔁 步骤 3:应用配置并重启 Docker
保存文件并退出编辑器(在 nano
中,按 Ctrl+O
保存,按 Enter
确认,然后按 Ctrl+X
退出)。
然后执行:
# 重新加载 systemd 配置
sudo systemctl daemon-reload# 重启 Docker 服务,使新配置生效
sudo systemctl restart docker
✅ 步骤 4:验证配置是否成功
再次运行你之前用过的命令来检查 Docker 服务的环境变量:
sudo systemctl show docker --property=Environment
你应该看到类似这样的输出:
Environment=HTTP_PROXY=http://127.0.0.1:7890 HTTPS_PROXY=http://127.0.0.1:7890 NO_PROXY=localhost,127.0.0.0/8,::1,*.local,*.internal
🚀 步骤 5:测试 Docker 拉取
现在,尝试拉取镜像,速度应该会快很多:
docker pull ghcr.io/autowarefoundation/autoware:universe
image 拷贝:导出为 tar 文件
这是最通用的方法,将镜像保存为一个 .tar
文件,然后可以拷贝到 U 盘、另一台机器或通过网络传输。
-
导出(保存)镜像:
在你已经docker pull
下载了镜像的机器上运行:docker save -o autoware_universe.tar ghcr.io/autowarefoundation/autoware:universe
- 这会创建一个名为
autoware_universe.tar
的文件,包含了完整的镜像数据(包括所有层和元数据)。 - 你也可以使用镜像的
IMAGE ID
来保存:docker save -o autoware_universe.tar abc123def456
- 这会创建一个名为
-
拷贝文件:
将生成的autoware_universe.tar
文件拷贝到目标位置(如 U 盘、另一台服务器)。 -
导入(加载)镜像:
在目标机器上(需要安装 Docker),运行:docker load -i autoware_universe.tar
- 镜像加载完成后,就可以用
docker images
看到它,并用docker run
启动容器了。
- 镜像加载完成后,就可以用
docker 下载运行
1. 下载镜像
docker pull <image_name>:<tag>
2. 运行容器
docker run <image_name>:<tag>
注意:docker run 会自动检查本地是否存在镜像,不存在则自动下载
docker 查看指令
目的 | 命令 |
---|---|
查看正在运行的容器 | docker ps |
查看所有 (all) 容器(含停止的) | docker ps -a |
查看本地所有镜像 | docker images 或 docker image ls |
查看 Docker 系统信息 | docker info |
查看磁盘占用 | docker system df |
查看容器详细信息 | docker inspect <容器名> |
容器正在运行,想进入查看 | docker exec -it |