bash
sudo apt update #sudo:以 超级用户权限 运行命令。apt update:更新 APT 软件包管理器 的软件源列表,确保安装的是最新版本的软件。
sudo apt install docker.io -y #apt install docker.io:安装 Docker; -y:自动确认安装(否则安装过程中会提示你输入 Y/N 进行确认)
sudo systemctl enable --now docker #systemctl enable docker:让 Docker 在系统启动时自动运行; --now:除了启用 Docker 开机自启,还立即启动 Docker 服务。 这个命令确保每次开机 Docker 都会自动启动,并且你现在就可以使用它了
#注:下面这句我用了之后再使用docker run 的话还是要加sudo,有待进一步排查
sudo usermod -aG docker $USER #usermod -aG docker $USER:把当前用户 ($USER) 添加到 docker 用户组,这样,你可以在 不使用 sudo 的情况下运行 Docker 命令,比如 docker ps、docker run 等
newgrp docker #让当前用户生效,无需重启。newgrp docker:让新的用户组权限 立即生效,否则你需要 重启系统 才能生效。这样你可以立刻使用 docker 命令,而不需要退出终端或重启电脑
按顺序执行这些命令,然后试试运行:
bash
docker --version
docker run hello-world (显示没有权限别忘了加sudo)
第一句正常,但是第二条命令会报错:
docker run hello-world
Unable to find image 'hello-world:latest' locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers). See 'docker run --help'.
这个错误表明 Docker 无法从官方 Docker Hub 拉取 hello-world
镜像 ,通常是因为 网络问题(比如访问 Docker Hub 受限或超时)
可以先试一下检查 Docker 运行状态(虽然大概不是这里的问题)
bash
sudo systemctl restart docker # 重启 Docker
sudo systemctl status docker # 查看 Docker 运行状态
如果 status
显示 active (running)
,说明 Docker 正常
尝试手动拉取 hello-world(大概率也会失败)
bash
docker pull hello-world(显示没有权限别忘了加sudo)
要更换docker源https://zhuanlan.zhihu.com/p/32004414428
bash
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://docker.m.daocloud.io"]
}
EOF #sudo:以 超级用户权限 运行。
#tee /etc/docker/daemon.json:将 接下来的内容(EOF 之间的部分)写入 /etc/docker/daemon.json。
#<<EOF:表示 多行输入,直到遇到 EOF 结束。
#{ "registry-mirrors": ["https://docker.m.daocloud.io"] }这是 Docker 的 JSON 配置,告诉 Docker 使用 国内镜像源 来加速拉取镜像。
#registry-mirrors:指定 镜像加速地址。
#EOF:这个 EOF 是 结束标记,告诉 Shell 写入完成,不要再继续追加内容。
使用vim或nano也可以,反正有这么个文件就行(anyway,如果显示是只读文件,别忘了vim或nano前加sudo)
此时还是不能正常使用的,需要
bash
sudo systemctl daemon-reload #systemctl:用于管理 systemd 服务(Linux 的服务管理工具)daemon-reload:重新加载 systemd 配置,让它识别 新的或修改后的服务配置(比如 /etc/docker/daemon.json 的更改)。
#作用:如果你修改了 Docker 的配置文件(例如换了镜像源),就需要 daemon-reload 让系统重新读取它。
sudo systemctl restart docker #重启 Docker 服务
此时sudo docker run hello-world应该可以正常使用了
docker-io, docker-ce区别(因为很多教程给的都是下载ce社区版,和大模型给的方法不同,故有此疑问):
维护者:https://www.zhihu.com/question/266021659/answer/1257882242
-
docker.io:由Debian团队维护,存在于Ubuntu的官方库中。
-
docker-ce:由Docker官方维护,是Docker社区版。
依赖管理:【搬运】docker.io 和 docker-ce 区别 - 小明明007 - 博客园
- docker.io :采用
apt
方式管理依赖,依赖包由Ubuntu统一管理。 - docker-ce :使用
go
语言管理依赖,自行管理所有依赖,确保运行稳定。