一、卸载旧版本

sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

hint:

  1. apt-get报告这些包都没安装,这没有关系
  2. /var/lib/docker/包括图像、容器、卷和网络,都被保留。Docker 引擎包现在称为docker-ce

二、安装方法

您可以根据需要以不同的方式安装 Docker Engine:

  1. 大多数用户 设置 Docker 的存储库并从中安装,以便于安装和升级任务。这是推荐的方法,除了 Raspbian。

  2. 一些用户下载 DEB 包并 手动安装,完全手动管理升级。这在诸如在无法访问 Internet 的气隙系统上安装 Docker 等情况下很有用。

  3. 在测试和开发环境中,一些用户选择使用自动化 便利脚本来安装 Docker。这是目前 Raspbian 的唯一方法。

这里因为使用自动化脚本安装总会出现这样的问题:

Executing docker install script, commit: 93d2499759296ac1f9c510605fef85052a2c32be

  • sh -c apt-get update -qq >/dev/null
  • sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-> > transport-https ca-certificates curl >/dev/null
  • sh -c curl -fsSL “https://download.docker.com/linux/raspbian/gpg” | gpg -> -dearmor --yes -o /usr/share/keyrings/docker-archive-keyring.gpg
  • sh -c echo “deb [arch=armhf signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/raspbian buster stable” > /etc/apt/sources.list.d/docker.list
  • sh -c apt-get update -qq >/dev/null
  • sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends docker-ce-cli docker-ce >/dev/null
    E: Sub-process /usr/bin/dpkg returned an error code (1)

在这里插入图片描述
因此我们使用存储库安装安装

三、使用存储库安装

1. 设置存储库

  • 更新apt包索引并安装包以允许apt通过 HTTPS 使用存储库:
sudo apt-get upgrade
sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  • 添加 Docker 的官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  • 使用以下命令设置稳定存储库。要添加 nightly或test存储库,请在以下命令中的单词之后添加单词nightly或test(或两者) 。

2. 安装Docker 引擎

  • 更新apt包索引,安装最新版本的Docker Engine和containerd,或者进入下一步安装特定版本:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

也可以安装 特定版本:

sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

排坑: 此时会出现以下问题:

Job for docker.service failed because the control process exited with error code.
See “systemctl status docker.service” and “journalctl -xe” for details.
invoke-rc.d: initscript docker, action “start” failed.
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Mon 2022-04-25 13:52:26 CST; 30ms ago
Docs: https://docs.docker.com
Process: 12130 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE)
Main PID: 12130 (code=exited, status=1/FAILURE)
dpkg: error processing package docker-ce (–configure):
installed docker-ce package post-installation script subprocess returned error exit status 1
Processing triggers for man-db (2.8.5-2) …
Processing triggers for systemd (241-7~deb10u8+rpi1) …
Errors were encountered while processing:
docker-ce
E: Sub-process /usr/bin/dpkg returned an error code (1)

在这里插入图片描述
解决办法在下一节:

3. 解决docker-ce安装时出现的错误

  • 输入以下命令:
cd /var/lib/dpkg
sudo mv info info.bak
sudo mkdir info
  • 再次安装即可:
sudo apt-get install docker-ce docker-ce-cli containerd.io
  • 成功:
    在这里插入图片描述
  • 但是此时启动docker服务,会出现以下问题:
sudo systemctl start docker

问题:

Job for docker.service failed because the control process exited with error code.

4. 解决docker服务存在的问题

  • 以上的问题可以修复解决:
sudo dockerd --debug
  • 然后重启:
sudo reboot

此时再启动docker服务并hello world一下:

sudo systemctl start docker
sudo docker run hello-world
  • 至此,docker的部署就成功了:
    在这里插入图片描述
Logo

一站式 AI 云服务平台

更多推荐