一、问题背景
在宝塔面板的 Docker 应用中安装 Ubuntu 容器后,面板显示已经安装成功,但是点击 启动 时出现报错。
报错内容类似:
启动失败: ubuntu_ise5 Pulling Get "https://registry-1.docker.io/v2/":
net/http: request canceled while waiting for connection
(Client.Timeout exceeded while awaiting headers)
或者:
Error response from daemon: Get "https://registry-1.docker.io/v2/":
net/http: request canceled while waiting for connection
二、问题原因
这个错误的核心原因是:
宝塔启动 Ubuntu 容器时,本地没有找到对应的 Ubuntu 镜像,于是 Docker 自动去官方 Docker Hub 拉取镜像,但国内服务器访问 Docker Hub 超时。
需要注意:
宝塔显示"已安装" ≠ Docker 镜像已经成功下载到本地
宝塔里的"已安装"很多时候只是代表:
应用配置已创建
但不一定代表:
镜像已成功拉取
容器已成功创建
容器已成功启动
所以点击启动时,宝塔才会尝试执行拉取镜像操作。
⸻
三、错误表现
宝塔界面中点击 Ubuntu 应用的 启动 按钮后,出现类似错误:
ubuntu_ise5 Pulling
Get "https://registry-1.docker.io/v2/":
net/http: request canceled while waiting for connection
这说明 Docker 正在尝试从官方 Docker Hub 拉取镜像:
但服务器访问超时。
⸻
四、解决思路
解决办法是:
- 不通过宝塔直接拉 Docker Hub 镜像;
- 使用国内可访问较快的 Docker 镜像源手动拉取 Ubuntu;
- 给拉下来的镜像打成本地常用标签;
- 再回到宝塔启动 Ubuntu 应用。
⸻
五、实际解决命令
- 使用 DaoCloud 镜像源拉取 Ubuntu 20.04
在服务器 SSH 终端执行:
docker pull m.daocloud.io/docker.io/library/ubuntu:20.04
如果速度较快并成功拉取,说明这个镜像源可用。
⸻
- 给镜像打成本地标签
拉取成功后,执行下面几条命令:
docker tag m.daocloud.io/docker.io/library/ubuntu:20.04 ubuntu:20.04
docker tag m.daocloud.io/docker.io/library/ubuntu:20.04 ubuntu:latest
docker tag m.daocloud.io/docker.io/library/ubuntu:20.04 ubuntu_ise5:latest
说明:
ubuntu:20.04 宝塔界面里显示的 Ubuntu 版本
ubuntu:latest 防止宝塔默认找 latest 版本
ubuntu_ise5:latest 针对宝塔应用名称 ubuntu_ise5 打的本地标签
其中 ubuntu_ise5 是宝塔里当前 Ubuntu 应用的名称,如果你的应用名称不一样,需要改成自己的实际名称。
例如你的宝塔应用名是:
ubuntu_test
那就执行:
docker tag m.daocloud.io/docker.io/library/ubuntu:20.04 ubuntu_test:latest
⸻
- 检查本地 Ubuntu 镜像是否存在
执行:
docker images | grep ubuntu
正常能看到类似结果:
ubuntu 20.04
ubuntu latest
ubuntu_ise5 latest
只要能看到这些镜像,说明 Ubuntu 镜像已经在本地了。
⸻
- 回到宝塔启动 Ubuntu
然后回到宝塔面板:
Docker 应用 > 已安装 > Ubuntu > 启动
这时宝塔会优先使用本地镜像,不需要再去访问 Docker 官方仓库,一般就可以正常启动。
⸻
六、如果还是启动失败,继续排查
- 查看本地有没有 Ubuntu 镜像
docker images | grep ubuntu
如果没有任何输出,说明镜像没有拉取成功,需要重新拉取。
⸻
- 查看容器是否已经创建
docker ps -a | grep ubuntu
如果没有输出,说明 Docker 里还没有真实容器,宝塔只是有应用记录。
⸻
- 查看宝塔容器实际使用的镜像名
如果容器已经存在,例如容器名是:
ubuntu_ise5
可以执行:
docker inspect ubuntu_ise5 --format '{{.Config.Image}}'
它会输出该容器真正使用的镜像名。
例如输出:
ubuntu:20.04
就说明它使用的是 ubuntu:20.04。
如果输出:
ubuntu_ise5
就说明它使用的是 ubuntu_ise5。
然后按照实际镜像名重新打标签。
⸻
七、可选:配置 Docker 镜像加速地址
如果希望后续拉镜像尽量走国内镜像源,可以修改 Docker 配置文件。
执行:
sudo mkdir -p /etc/docker
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak.$(date +%F-%H%M%S) 2>/dev/null || true
sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io"
],
"dns": [
"223.5.5.5",
"119.29.29.29",
"8.8.8.8"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
检查是否生效:
docker info | grep -A 20 "Registry Mirrors"
如果能看到配置的镜像源地址,说明配置成功。
注意:
重启 Docker 会导致正在运行的 Docker 容器短暂停止。
⸻
八、常见错误说明
- 为什么宝塔显示已安装,启动时还要拉镜像?
因为宝塔的"已安装"可能只是代表应用记录或配置已经创建,不代表 Docker 镜像已经成功下载到本地。
真正启动时,如果本地没有镜像,Docker 会自动去远程仓库拉取。
⸻
- 为什么会访问 registry-1.docker.io?
因为 Docker 默认镜像仓库是 Docker Hub。
如果本地没有镜像,又没有可用的镜像加速,就会访问:
国内服务器访问这个地址经常超时。
⸻
- 为什么要执行 docker tag?
因为宝塔启动时可能找的是:
ubuntu:20.04
ubuntu:latest
ubuntu_ise5:latest
而我们从 DaoCloud 拉下来的镜像名字是:
m.daocloud.io/docker.io/library/ubuntu:20.04
虽然内容是同一个 Ubuntu 镜像,但名字不同。
所以需要用 docker tag 给它起几个宝塔能识别的本地名字。
⸻
- 命令里不要复制 root@wenyu:~#
终端里的:
root@wenyu:~#
只是命令提示符,不是命令内容。
不要复制成:
root@wenyu:~# docker pull xxx
应该只复制:
docker pull xxx
⸻
九、完整可复制流程
如果宝塔安装 Ubuntu 后启动失败,可以直接执行下面这一整组命令:
docker pull m.daocloud.io/docker.io/library/ubuntu:20.04
docker tag m.daocloud.io/docker.io/library/ubuntu:20.04 ubuntu:20.04
docker tag m.daocloud.io/docker.io/library/ubuntu:20.04 ubuntu:latest
docker tag m.daocloud.io/docker.io/library/ubuntu:20.04 ubuntu_ise5:latest
docker images | grep ubuntu
执行完成后,再回宝塔点击:
Ubuntu 应用 > 启动
如果你的宝塔应用名称不是 ubuntu_ise5,需要把下面这条里的 ubuntu_ise5 改成自己的应用名称:
docker tag m.daocloud.io/docker.io/library/ubuntu:20.04 ubuntu_ise5:latest
⸻
十、总结
本次问题的本质是:
宝塔启动 Ubuntu 容器时,本地没有对应镜像,
Docker 自动去官方 Docker Hub 拉取,
但国内服务器访问 Docker Hub 超时,
所以启动失败。
最终解决办法是:
使用 DaoCloud 镜像源手动拉取 Ubuntu 20.04,
再给镜像打成本地标签,
最后回宝塔启动应用。
核心命令:
docker pull m.daocloud.io/docker.io/library/ubuntu:20.04
docker tag m.daocloud.io/docker.io/library/ubuntu:20.04 ubuntu:20.04
docker tag m.daocloud.io/docker.io/library/ubuntu:20.04 ubuntu:latest
docker tag m.daocloud.io/docker.io/library/ubuntu:20.04 ubuntu_ise5:latest