宝塔 Docker 安装 Ubuntu 及启动失败解决流程

一、问题背景

在宝塔面板的 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 拉取镜像:

https://registry-1.docker.io

但服务器访问超时。

四、解决思路

解决办法是:

  1. 不通过宝塔直接拉 Docker Hub 镜像;
  2. 使用国内可访问较快的 Docker 镜像源手动拉取 Ubuntu;
  3. 给拉下来的镜像打成本地常用标签;
  4. 再回到宝塔启动 Ubuntu 应用。

五、实际解决命令

  1. 使用 DaoCloud 镜像源拉取 Ubuntu 20.04

在服务器 SSH 终端执行:

docker pull m.daocloud.io/docker.io/library/ubuntu:20.04

如果速度较快并成功拉取,说明这个镜像源可用。

  1. 给镜像打成本地标签

拉取成功后,执行下面几条命令:

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

  1. 检查本地 Ubuntu 镜像是否存在

执行:

docker images | grep ubuntu

正常能看到类似结果:

ubuntu 20.04

ubuntu latest

ubuntu_ise5 latest

只要能看到这些镜像,说明 Ubuntu 镜像已经在本地了。

  1. 回到宝塔启动 Ubuntu

然后回到宝塔面板:

Docker 应用 > 已安装 > Ubuntu > 启动

这时宝塔会优先使用本地镜像,不需要再去访问 Docker 官方仓库,一般就可以正常启动。

六、如果还是启动失败,继续排查

  1. 查看本地有没有 Ubuntu 镜像

docker images | grep ubuntu

如果没有任何输出,说明镜像没有拉取成功,需要重新拉取。

  1. 查看容器是否已经创建

docker ps -a | grep ubuntu

如果没有输出,说明 Docker 里还没有真实容器,宝塔只是有应用记录。

  1. 查看宝塔容器实际使用的镜像名

如果容器已经存在,例如容器名是:

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.1ms.run",

"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 容器短暂停止。

八、常见错误说明

  1. 为什么宝塔显示已安装,启动时还要拉镜像?

因为宝塔的"已安装"可能只是代表应用记录或配置已经创建,不代表 Docker 镜像已经成功下载到本地。

真正启动时,如果本地没有镜像,Docker 会自动去远程仓库拉取。

  1. 为什么会访问 registry-1.docker.io

因为 Docker 默认镜像仓库是 Docker Hub。

如果本地没有镜像,又没有可用的镜像加速,就会访问:

https://registry-1.docker.io

国内服务器访问这个地址经常超时。

  1. 为什么要执行 docker tag?

因为宝塔启动时可能找的是:

ubuntu:20.04

ubuntu:latest

ubuntu_ise5:latest

而我们从 DaoCloud 拉下来的镜像名字是:

m.daocloud.io/docker.io/library/ubuntu:20.04

虽然内容是同一个 Ubuntu 镜像,但名字不同。

所以需要用 docker tag 给它起几个宝塔能识别的本地名字。

  1. 命令里不要复制 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

相关推荐
C++ 老炮儿的技术栈1 小时前
Ubuntu root账号自动登陆
linux·运维·服务器·c语言·c++·ubuntu·visual studio
biter down2 小时前
3:VMware Workstation 安装 Ubuntu 22.04 超详细教程
linux·运维·ubuntu
zhping10112 小时前
Ubuntu 登录密码忘记
运维·服务器·ubuntu
问简2 小时前
ubuntu wine
ubuntu
码云骑士4 小时前
28-Docker部署Django(下)-docker-compose编排与静态文件处理
docker·容器·django
至乐活着5 小时前
Docker Compose多服务编排实战:从零搭建Node.js+MySQL+Redis全栈应用
docker·微服务·devops·容器编排·compose
木雷坞5 小时前
Firecrawl Docker Compose 自托管排查:镜像、Redis、队列和 Playwright
redis·docker·容器·firecrawl
whyfail6 小时前
Colima:把 Docker Desktop 从 Mac 上“瘦身”的那把刀
macos·docker·容器
biter down6 小时前
2:Ubuntu 22.04 LTS 的完整下载教程
linux·运维·ubuntu