Ubuntu 和 Debian 系统安装 Docker 全攻略:步骤、问题与解决方案

准备工作

首先命令行查看自己系统的情况:lsb_release -a

1
2
3
4
Distributor ID: Debian(系统名称)
Description: Debian GNU/Linux 11 (bullseye)(详细描述)
Release: 11(版本号)
Codename: bullseye(版本代号-稳定版)

完成后可尝试根据下方一条命令行安装,目前因为大环境原因建议使用镜像加速地址,即从镜像源安装,比如使用清华大学镜像源或者其他镜像加速地址,文章最下方列出一些常见地址。

注意:在安装依赖包时,可能因为网速或者其他原因较慢的话可以更换源,自行斟酌,谨慎操作。

一、安装 Docker 相关问题

一条命令行安装 Docker

Ubuntu

  • 使用官方安装脚本:
1
curl -fsSL https://get.docker.com -o get - docker.sh && sudo sh get - docker.sh
  • 或者使用官方仓库安装(以下命令可能因权限等问题需要输入密码等操作):
1
sudo apt - update && sudo apt - install - y apt - transport - https ca - certificates curl gnupg2 software - properties - common && curl - fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor - o /usr/share/keyrings/docker - archive - keyring.gpg && echo "deb [arch=amd64 signed - by = /usr/share/keyrings/docker - archive - keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release - cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null && sudo apt - update && sudo apt - install - y docker - ce docker - ce - cli containerd.io

Debian

  • 使用官方仓库安装(以下命令可能因网络、权限等问题需要适当干预):
1
sudo apt - get update && sudo apt - get install - y apt - transport - https ca - certificates curl gnupg2 software - properties - common && curl - fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor - o /usr/share/keyrings/docker - archive - keyring.gpg && echo "deb [arch=amd64 signed - by = /usr/share/keyrings/docker - archive - keyring.gpg] https://download.docker.com/linux/debian $(lsb_release - cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null && sudo apt - get update && sudo apt - get install - y docker - ce docker - ce - cli containerd.io

Docker 的源(镜像地址)

(Ubuntu 和 Debian)

源的位置:安装命令中添加的源是 Docker 官方提供的软件仓库。

  • 对于 Ubuntu,源添加命令示例为:
1
echo "deb [arch=amd64 signed - by = /usr/share/keyrings/docker - archive - keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release - cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • 对于 Debian,源添加命令示例为:
1
echo "deb [arch=amd64 signed - by = /usr/share/keyrings/docker - archive - keyring.gpg] https://download.docker.com/linux/debian $(lsb_release - cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更换源

以阿里云为例,Ubuntu 和 Debian 操作类似:

  • 首先,删除原来的 Docker 官方源文件。在终端中输入:sudo rm /etc/apt/sources.list.d/docker.list
  • 然后,添加阿里云的 Docker 镜像源。创建一个新的源文件,在终端中输入(以 Ubuntu 20.04 “focal” 为例,Debian 版本代号需要根据实际情况修改):
1
echo "deb [arch=amd64] https://mirrors.aliyun.com/docker - ce/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • 之后,更新软件包列表:sudo apt - get update。这样就可以使用阿里云的镜像源来安装和更新 Docker 相关软件包了。

从清华大学镜像源安装 Docker

镜像源地址:https://mirrors.tuna.tsinghua.edu.cn/

[tabs]
[tab name=”Ubuntu” active=”true”]

更新系统软件包列表:

1
sudo apt - get update
  • 安装依赖包:
1
sudo apt - get install - y apt - transport - https ca - certificates curl software - properties - common
  • 添加清华大学 Docker 镜像源:
1
2
3
sudo rm /etc/apt/sources.list.d/docker.list
echo "deb [arch=amd64 signed - by = /usr/share/keyrings/docker - archive - keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker - ce/linux/ubuntu $(lsb_release - cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
curl - fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor - o /usr/share/keyrings/docker - archive - keyring.gpg
  • 更新软件包列表并安装 Docker:
1
2
sudo apt - get update
sudo apt - get install - y docker - ce docker - ce - cli containerd.io
  • 验证 Docker 安装:
1
sudo docker run hello - world

[/tab]
[tab name=”Debian”]

更新系统软件包列表:

1
sudo apt - get update
  • 安装依赖包:
1
sudo apt - get install - y apt - transport - https ca - certificates curl gnupg2 software - properties - common
  • 添加清华大学 Docker 镜像源:
1
2
3
sudo rm /etc/apt/sources.list.d/docker.list
echo "deb [arch = amd64 signed - by = /usr/share/keyrings/docker - archive - keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker - ce/linux/debian $(lsb_release - cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
curl - fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor - o /usr/share/keyrings/docker - archive - keyring.gpg
  • 更新软件包列表并安装 Docker:
1
2
sudo apt - get update
sudo apt - get install - y docker - ce docker - ce - cli containerd.io
  • 验证 Docker 安装:
1
sudo docker run hello - world

[/tab]
[/tabs]

二、系统依赖包相关问题

依赖包获取位置

  • 解决方法(Ubuntu 和 Debian):
    • 首先从配置的默认软件源获取,软件源信息存储在 /etc/apt/sources.list/etc/apt/sources.list.d/目录下的文件中。当配置了 Docker 官方仓库后,一些与 Docker 紧密相关的依赖包可能会从 Docker 官方仓库获取。

更换依赖包的源

[tabs]
[tab name=”Ubuntu“ active=”true”]

在容器内修改软件源(已经安装docker)

  • 步骤一:进入容器
    • 首先,使用 docker run命令启动一个容器。例如,启动一个 Ubuntu 容器:docker run -it ubuntu:latest /bin/bash。这将以交互模式(-it)启动一个基于 ubuntu:latest镜像的容器,并进入容器内部的 bash终端。
  • 步骤二:备份原始软件源文件(可选但推荐)
    • 在容器内,为了防止修改出错,可以先备份原始的软件源文件。对于 Ubuntu 系统,软件源文件是 /etc/apt/sources.list。使用 cp命令进行备份,例如:cp /etc/apt/sources.list /etc/apt/sources.list.backup
  • 步骤三:编辑软件源文件
    • 使用文本编辑器(如 vinano)编辑 /etc/apt/sources.list文件。例如,使用 nano编辑器:nano /etc/apt/sources.list
    • 清除文件中原有的内容,然后添加你想要的软件源。以使用阿里云的 Ubuntu 软件源为例,添加以下内容:
1
2
3
4
5
6
7
8
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal - security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal - security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal - updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal - updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal - backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal - backports main restricted universe multiverse
  • 这里的 focal是 Ubuntu 20.04 的版本代号,你需要根据实际使用的 Ubuntu 版本进行修改。
  • 步骤四:更新软件包列表
    • 在容器内运行 apt - get update命令,使新的软件源生效。这会根据新的软件源更新容器内可安装软件包的列表。

[/tab]

[tab name=”Debian”]

  1. 备份原始软件源文件(未安装docker)
    • 打开终端,使用以下命令备份 /etc/apt/sources.list文件:
1
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
  • 这一步很重要,因为如果在修改软件源过程中出现问题,你可以通过备份文件恢复原始的软件源配置。
  1. 选择合适的软件源
    • 国内软件源
      • 阿里云:其 Debian 软件源格式如下(以 Debian 11 “bullseye” 为例):
1
2
3
4
5
6
deb http://mirrors.aliyun.com/debian/ bullseye main non - free contrib
deb - src http://mirrors.aliyun.com/debian/ bullseye main non - free contrib
deb http://mirrors.aliyun.com/debian - security/ bullseye - security main non - free contrib
deb - src http://mirrors.aliyun.com/debian - security/ bullseye - security main non - free contrib
deb http://mirrors.aliyun.com/debian/ bullseye - updates main non - free contrib
deb - src http://mirrors.aliyun.com/debian/ bullseye - updates main non - free contrib
  • 清华大学:清华大学的 Debian 软件源(以 Debian 11 “bullseye” 为例):
1
2
3
4
5
6
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non - free
deb - src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non - free
deb https://mirrors.tuna.tsinghua.edu.cn/debian - security/ bullseye - security main contrib non - free
deb - src https://mirrors.tuna.tsinghua.edu.cn/debian - security/ bullseye - security main contrib non - free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye - updates main contrib non - free
deb - src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye - updates main contrib non - free
  • 官方软件源:Debian 官方软件源格式(以 Debian 11 “bullseye” 为例)如下:
1
2
3
4
5
6
deb http://deb.debian.org/debian/ bullseye main
deb - src http://deb.debian.org/debian/ bullseye main
deb http://security.debian.org/debian - security bullseye - security main
deb - src http://security.debian.org/debian - security bullseye - security main
deb http://deb.debian.org/debian/ bullseye - updates main
deb - src http://deb.debian.org/debian/ bullseye - updates main
  1. 修改软件源文件
    • 使用文本编辑器(如 vinano)打开 /etc/apt/sources.list文件。例如,使用 nano编辑器:
1
sudo nano /etc/apt/sources.list
  • 清除文件中原有的内容,然后添加你选择的软件源。比如,如果你想使用清华大学的软件源,就将上面清华大学软件源的内容复制粘贴进去。
  1. 更新软件包列表
    • 保存修改后的 /etc/apt/sources.list文件,然后在终端运行以下命令更新软件包列表:
1
sudo apt - get update
  • 这一步会根据新的软件源更新系统可安装软件包的列表。如果在更新过程中出现错误,可能是软件源配置有误,需要检查 /etc/apt/sources.list文件中的内容是否正确,或者尝试恢复备份文件后重新修改。

[/tab]
[/tabs]

三、Docker 服务相关问题

  1. 问题:如何检查 Docker 服务是否正在运行?
    • 解决方法(Ubuntu 和 Debian):
      • 使用 systemctl命令(适用于 systemd 系统):sudo systemctl status docker,如果服务正在运行,输出中会包含 active (running)字样。
      • 或者使用 service命令(适用于传统的 sysvinit 系统):sudo service docker status,也会显示服务是否正在运行以及其他相关信息。
  2. 问题:如何启动 Docker 服务?
    • 解决方法(Ubuntu 和 Debian)
      • 使用 systemctl(适用于 systemd 系统):
        • 检查状态:sudo systemctl status docker
        • 启动服务:sudo systemctl start docker
        • 验证启动:sudo systemctl status docker查看是否显示 active (running)
      • 使用 service(适用于传统 sysvinit 系统):
        • 检查状态:sudo service docker status
        • 启动服务:sudo service docker start
        • 验证启动:sudo service docker status查看是否显示服务正在运行。
  3. 问题:如何停止 Docker 服务?
    • 解决方法(Ubuntu 和 Debian)
      • 使用 systemctl(适用于 systemd 系统):
        • 检查状态:sudo systemctl status docker
        • 停止服务:sudo systemctl stop docker
        • 验证停止:sudo systemctl status docker查看是否显示 inactive (dead)
      • 使用 service(适用于传统 sysvinit 系统):
        • 检查状态:sudo service docker status
        • 停止服务:sudo service docker stop
        • 验证停止:sudo service docker status查看是否显示服务未运行。
  4. 问题:如何重启 Docker 服务?
    • 解决方法(Ubuntu 和 Debian)
      • 使用 systemctl(适用于 systemd 系统):
        • 检查状态(可选):sudo systemctl status docker
        • 执行重启:sudo systemctl restart docker
        • 验证重启(可选):sudo systemctl status docker查看是否显示 active (running)且启动时间为刚刚重启后的时间。
      • 使用 service(适用于传统 sysvinit 系统):
        • 检查状态(可选):sudo service docker status
        • 执行重启:sudo service docker restart
        • 确认重启成功(可选):sudo service docker status查看是否显示服务正在运行。

四、软件源与 Docker 镜像源混淆相关问题

  1. 问题:修改了软件源后,是否安装 Docker 时直接从软件源获取镜像安装 Docker?不用再修改镜像源?
    • 解决方法
      • 软件源主要用于系统软件包安装,Docker 镜像源用于获取 Docker 容器镜像,二者不同。
      • 基于包管理器安装 Docker 时,如果软件源中有 Docker 相关软件包且配置正确,可从软件源获取,但通常系统默认软件源中的 Docker 版本可能不是最新或功能完整的,且可能需要添加 Docker 官方仓库及相关验证信息才能正确安装。使用 Docker 官方脚本安装则直接从官方指定渠道获取,不受系统软件源影响。安装 Docker 后拉取容器镜像还是从 Docker 镜像源获取,修改软件源不会改变这一点,若要加速镜像拉取,需要配置 Docker 镜像加速地址。
  2. 问题:修改了镜像源之后可以直接安装 Docker,不必安装必要依赖包是吗?
    • 解决方法
      • 新软件源如果完整包含 Docker 安装所需依赖包且配置正确,可直接获取依赖包安装 Docker。但如果软件源部分包含或不包含依赖包,或存在版本兼容性问题,仍可能需要手动安装缺失的依赖包或进一步配置软件源。

五、其他常见问题

(一)权限问题

  1. 问题:在安装或使用 Docker 过程中出现权限不足的提示怎么办?
    • 解决方法(Ubuntu 和 Debian)
      • 许多 Docker 操作需要 root 权限。如果在非 root 用户下操作,可以在命令前添加 sudo来以管理员权限运行命令。例如,运行容器命令 docker run时如果提示权限不足,可以使用 sudo docker run [容器选项和镜像名称]
      • 或者将用户添加到 docker用户组,这样在一定程度上可以避免频繁使用 sudo。首先创建 docker用户组(如果不存在):sudo groupadd docker,然后将当前用户添加到 docker组:sudo usermod -aG docker $USER,最后需要重新登录或者使用 newgrp docker命令使组权限生效。

(二)容器网络问题

  1. 问题:容器无法访问外部网络或者容器之间无法通信怎么办?
    • 解决方法(Ubuntu 和 Debian)
      • 检查主机的网络配置和防火墙规则。确保主机能够正常访问外部网络,并且没有阻止容器相关的网络流量。
      • 对于容器之间的通信,确认容器是否在同一网络中。如果没有,可以使用 docker network create命令创建一个共享网络,然后在启动容器时将容器添加到这个网络中。例如,创建一个名为 my - network的网络:docker network create my - network,启动容器并加入该网络:docker run - - network = my - network [容器选项和镜像名称]
      • 检查 Docker 的网络模式。默认情况下,Docker 使用桥接网络模式(bridge),但也可以根据需要使用主机网络模式(host)或者其他自定义网络模式。如果使用桥接网络模式,可以通过 docker network inspect [网络名称](如 docker network inspect bridge)来查看网络详细信息,包括容器的 IP 分配等情况,以排查网络问题。

(三)镜像拉取和推送问题

  1. 问题:拉取 Docker 镜像时速度很慢或者拉取失败怎么办?
    • 解决方法(Ubuntu 和 Debian)
      • 配置 Docker 镜像加速地址。在 /etc/docker/daemon.json文件(如果不存在可以创建)中添加 "registry - mirrors"字段,并将镜像加速地址添加到该字段下的数组中。例如,使用阿里云镜像加速地址(假设为 https://xxx.mirror.aliyuncs.com)的配置如下:
1
2
3
4
5
{
"registry - mirrors": [
"https://xxx.mirror.aliyuncs.com"
]
}
  • 保存文件后,重启 Docker 服务(参考前面的 Docker 服务重启方法)。
  • 如果拉取失败,可能是镜像名称或标签错误,或者镜像仓库不可用。检查镜像名称和标签是否正确,尝试更换镜像仓库或者等待仓库恢复正常。
  • 问题:如何推送本地构建的镜像到远程仓库?
  • 解决方法(Ubuntu 和 Debian)
    • 首先,确保你在远程仓库(如 Docker Hub、阿里云容器镜像服务等)有账号并且已经登录。可以使用 docker login命令登录远程仓库,按照提示输入用户名和密码(或令牌等凭据)。
    • 给本地镜像添加合适的标签,标签格式通常为 [远程仓库地址/用户名]/[镜像名称]:[标签]。例如,要将本地镜像推送到 Docker Hub,假设你的用户名是 your - username,镜像名称是 my - image,标签是 latest,可以使用命令:docker tag my - image your - username/my - image:latest
    • 最后使用 docker push [远程仓库地址/用户名]/[镜像名称]:[标签]命令推送镜像。例如:docker push your - username/my - image:latest

常见的 Docker 镜像加速地址

  1. 阿里云:登录阿里云账号后,进入容器镜像服务的镜像加速器页面可获取个人专属的加速地址,格式为 https://<你的 id>.mirror.aliyuncs.com
  2. 腾讯云https://mirror.ccs.tencentyun.com
  3. 华为云https://<你的华为云专属地址>(需在华为云控制台获取)。通常格式类似 https://xxxxxx.mirror.swr.myhuaweicloud.com
  4. 网易http://hub-mirror.c.163.com
  5. 七牛云https://reg-mirror.qiniu.com
  6. 科大镜像https://docker.mirrors.ustc.edu.cn/
  7. DaoCloudhttps://docker.m.daocloud.io
  8. 清华大学https://mirrors.tuna.tsinghua.edu.cn/
  9. 搜狐镜像http://mirrors.sohu.com/
  10. Docker 中国https://registry.docker-cn.com(目前可能不太稳定或已停止服务)
  11. Registry.cyou 系列
    • https://docker.registry.cyou
    • https://docker-cf.registry.cyou