ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ubantu安装docker

ubantu安装docker 目录前言常见坑点速查表1. 彻底卸载旧版 Docker1.1 停止并禁用 Docker 服务1.2 卸载软件包与依赖1.3 手动清理残留数据与配置1.4 清理用户组2. 安装新版 Docker2.1 更新系统并安装依赖2.2 添加 Docker 官方 GPG 密钥与软件源2.3 安装 Docker 及相关组件3. 启动 Docker 并解决常见报错3.1 启动服务时遇到 masked 报错3.2 解除屏蔽并正常启动3.3 设置开机自启3.4 验证 Docker 安装成功4. 总结参考资料前言在 Ubuntu 系统上重新安装 Docker 时如果旧版本未彻底清理干净常常会遇到服务被屏蔽masked、残留配置冲突等问题。本文基于实际操作经验完整记录从卸载旧版 Docker 到全新安装并配置开机自启的全过程帮助读者避开常见坑点一步到位完成环境搭建。预计字数200-300 字常见坑点速查表下表汇总了卸载重装 Docker 过程中最常见的 5 个问题便于读者快速定位并对照解决坑点原因解决方案对应章节服务被屏蔽masked卸载阶段执行了systemctl mask docker导致新装后无法启动执行sudo systemctl unmask docker解除屏蔽后再启动3.1 / 3.2残留配置冲突卸载后未清理/etc/docker、/var/lib/docker等目录使用purge卸载后手动rm -rf清理残留目录1.2 / 1.3依赖包冲突旧版本依赖未随主程序一并移除执行sudo apt-get autoremove -y --purge docker*清理1.2端口占用旧容器或进程仍占用 80/443 等端口先停止并禁用旧服务必要时systemctl stop docker后清理1.1镜像与容器丢失直接删除/var/lib/docker导致数据不可恢复卸载前先备份数据目录确认无误后再清理1.31. 彻底卸载旧版 Docker1.1 停止并禁用 Docker 服务在卸载前先停止正在运行的 Docker 服务并禁用开机自启避免卸载过程中出现文件占用或服务冲突。# 1. 停止 Docker 服务sudosystemctl stopdocker# 2. 禁用开机自启sudosystemctl disabledocker# 3. (可选但推荐) 屏蔽服务单元防止被其他脚本意外启动sudosystemctl maskdocker1.2 卸载软件包与依赖使用purge彻底删除 Docker 主程序及配置文件并自动清理不再需要的依赖包。# 1. 卸载主程序及配置文件 (purge 会删除配置文件)sudoapt-getpurge-ydocker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker.io# 2. 自动移除不再需要的依赖包sudoapt-getautoremove-y--purgedocker*# 3. 清理 apt 缓存sudoapt-getclean1.3 手动清理残留数据与配置卸载软件包后仍需手动删除 Docker 的数据目录、配置文件、套接字及用户级配置确保系统完全干净。# 1. 删除 Docker 核心数据目录 (镜像、容器、卷、网络等)sudorm-rf/var/lib/dockersudorm-rf/var/lib/containerd# 2. 删除 Docker 配置文件sudorm-rf/etc/docker# 3. 删除 Docker 运行时套接字 (如果还存在)sudorm-f/var/run/docker.sock# 4. 删除用户主目录下的 Docker 配置 (当前用户)rm-rf~/.docker# 5. (可选) 检查并删除其他可能的残留路径sudorm-rf/var/lib/docker-networkssudorm-rf/usr/local/bin/docker-composesudorm-rf/usr/bin/docker*清理完成后可通过以下命令验证残留是否已彻底清除# 1. 检查是否还有残留的 Docker 软件包 (应无输出)dpkg-l|grepdocker# 2. 检查 Docker 服务状态 (应显示 not-found 或 inactive)systemctl statusdocker# 3. 检查 Docker 数据目录是否已删除 (应提示 No such file or directory)ls-la/var/lib/docker预期输出示例# dpkg -l | grep docker 无任何输出说明软件包已全部卸载# systemctl status docker 显示 Unit docker.service could not be found.# ls -la /var/lib/docker 提示 ls: cannot access /var/lib/docker: No such file or directory1.4 清理用户组删除 Docker 安装时创建的用户组避免遗留权限配置。操作步骤如下# 1. 查看系统中是否存在 docker 用户组 (若存在会显示一行记录)getent groupdocker预期输出示例存在时docker:x:999:若命令无任何输出说明 docker 用户组已不存在可跳过删除步骤。# 2. 删除 docker 用户组sudogroupdeldocker预期输出示例删除成功时无任何输出直接返回命令行提示符。# 3. 验证 docker 用户组是否已删除 (应无任何输出)getent groupdocker预期输出示例删除成功后# getent group docker 无任何输出说明 docker 用户组已成功删除预计字数600-800 字完成以上所有清理步骤后可通过下表逐项自检确认卸载是否彻底检查点验证命令预期结果软件包无残留dpkg -l | grep docker无任何输出说明软件包已全部卸载服务不存在systemctl status docker显示Unit docker.service could not be found.或inactive数据目录已删除ls -la /var/lib/docker提示No such file or directory用户组已删除getent group docker无任何输出说明 docker 用户组已不存在配置文件已清理ls -la /etc/docker提示No such file or directory2. 安装新版 Docker2.1 更新系统并安装依赖先更新软件源并安装ca-certificates、curl、gnupg等必要工具为后续添加 Docker 官方源做准备。# 1. 更新软件源索引确保能获取到最新的软件包列表sudoapt-getupdate# 2. 安装必要工具ca-certificates 用于验证 HTTPS 证书curl 用于下载文件gnupg 用于导入 GPG 密钥sudoapt-getinstall-yca-certificatescurlgnupg2.2 添加 Docker 官方 GPG 密钥与软件源创建密钥目录并导入 Docker 官方 GPG 密钥随后将 Docker 的 apt 源添加到系统中命令会自动适配当前 Ubuntu 版本。# 1. 创建用于存放 Docker GPG 密钥的目录 (权限设为 0755仅 root 可写)sudoinstall-m0755-d/etc/apt/keyrings# 2. 下载 Docker 官方 GPG 密钥并保存到指定目录sudocurl-fsSLhttps://download.docker.com/linux/ubuntu/gpg-o/etc/apt/keyrings/docker.asc# 3. 设置密钥文件权限仅允许 root 读写sudochmodar /etc/apt/keyrings/docker.asc# 4. 添加 Docker 官方 apt 软件源 ($(. /etc/os-release echo $UBUNTU_CODENAME) 会自动获取当前 Ubuntu 版本代号)echo\deb [arch$(dpkg --print-architecture)signed-by/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \$(./etc/os-releaseecho$UBUNTU_CODENAME)stable|\sudotee/etc/apt/sources.list.d/docker.list/dev/null2.3 安装 Docker 及相关组件更新软件源后一次性安装 Docker 主程序、命令行工具、容器运行时、构建插件和 Compose 插件。# 1. 更新软件源使新添加的 Docker 源生效sudoapt-getupdate# 2. 安装 Docker 及全部相关组件# docker-ce Docker 主程序 (社区版引擎)# docker-ce-cli Docker 命令行工具# containerd.io 容器运行时# docker-buildx-plugin 构建插件 (支持 BuildKit)# docker-compose-plugin Compose 插件 (用于多容器编排)sudoapt-getinstall-ydocker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin预计字数500-700 字3. 启动 Docker 并解决常见报错3.1 启动服务时遇到 masked 报错安装完成后执行sudo systemctl start docker时可能遇到Unit /etc/systemd/system/docker.service is masked的报错。这是因为卸载阶段执行了systemctl mask docker需要先解除屏蔽。3.2 解除屏蔽并正常启动执行sudo systemctl unmask docker解除屏蔽后再次启动 Docker 服务即可正常运行。操作步骤如下# 1. 解除屏蔽移除 systemd 对 docker 服务的屏蔽标记sudosystemctl unmaskdocker# 2. 启动 Docker 服务sudosystemctl startdocker# 3. 验证 Docker 服务状态 (应显示 active (running))systemctl statusdocker预期输出示例# systemctl unmask docker 无任何输出说明屏蔽已成功解除# systemctl start docker 无任何输出说明服务已成功启动# systemctl status docker 显示 Active: active (running)说明 Docker 已正常运行3.3 设置开机自启使用sudo systemctl enable docker --now一步到位完成开机自启设置并立即启动服务。该命令等价于先执行systemctl enable docker创建开机自启软链接再执行systemctl start docker立即启动服务--now参数将两步合并为一步避免遗漏。# 1. 设置开机自启并立即启动服务 (--now 表示同时执行 enable 和 start)sudosystemctlenabledocker--now预期输出示例Synchronizing state of docker.service with SysVservicescript with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-installenabledocker若输出如上所示说明已成功创建开机自启软链接且服务已立即启动。设置完成后可通过以下命令验证开机自启是否生效# 2. 检查 docker 服务是否已设置为开机自启 (应输出 enabled)systemctl is-enableddocker预期输出示例enabled若输出为enabled说明 Docker 已加入开机自启列表系统重启后会自动运行。若输出为disabled或static则需要重新执行sudo systemctl enable docker --now。3.4 验证 Docker 安装成功3.5 其他常见启动报错排查除 masked 报错外安装完成后还可能遇到以下 3 类常见问题下面逐一给出排查思路与解决命令。场景一执行 docker 命令提示 “Cannot connect to the Docker daemon”报错现象执行docker ps、docker images等命令时终端提示Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is thedockerdaemon running?原因分析Docker 服务未启动或当前用户不在docker用户组、无权访问 Docker 套接字。解决命令先启动 Docker 服务再将当前用户加入docker用户组。# 1. 启动 Docker 服务sudosystemctl startdocker# 2. 将当前用户加入 docker 用户组 (替换 $USER 为你的用户名)sudousermod-aGdocker$USER# 3. 重新加载用户组权限 (无需重启重新登录后永久生效)newgrpdocker预期输出systemctl start docker无任何输出usermod无任何输出执行docker ps后正常显示容器列表初始为空列表。场景二拉取镜像时提示 “permission denied”报错现象执行docker pull nginx等拉取镜像命令时终端提示permission deniedwhiletrying to connect to the Docker daemon socket at unix:///var/run/docker.sock原因分析当前用户不在docker用户组没有访问 Docker 套接字的权限。解决命令将当前用户加入docker用户组并重新登录使权限生效。# 1. 将当前用户加入 docker 用户组sudousermod-aGdocker$USER# 2. 重新登录使组权限生效 (或执行 newgrp docker 临时生效)# 注意修改用户组后必须重新登录或重启否则权限不会立即生效newgrpdocker预期输出usermod无任何输出重新登录后执行docker pull nginx可正常拉取镜像不再提示权限错误。场景三执行 docker compose 命令提示 “command not found”报错现象执行docker compose version时终端提示docker:composeis not adockercommand.原因分析docker-compose-plugin插件未正确安装导致docker compose子命令不可用。解决命令重新安装docker-compose-plugin插件。# 1. 更新软件源sudoapt-getupdate# 2. 重新安装 docker-compose-plugin 插件sudoapt-getinstall-ydocker-compose-plugin# 3. 验证 Compose 插件是否安装成功dockercompose version预期输出Docker Compose version v2.29.7服务正常启动后可通过以下命令验证 Docker 及 Compose 是否安装成功、能否正常运行容器# 1. 查看 Docker 引擎版本号docker--version预期输出示例Docker version27.3.1, build ce12230# 2. 查看 Docker Compose 插件版本号dockercompose version预期输出示例Docker Compose version v2.29.7# 3. 运行官方测试镜像 hello-world验证能否正常拉取并运行容器sudodockerrun hello-world预期输出示例成功时会打印以下提示信息Hello from Docker!This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled thehello-worldimage from the Docker Hub.3. The Docker daemon created a new container from that imagewhichruns the executable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client,whichsent it to your terminal.若docker run hello-world能正常输出上述提示说明 Docker 引擎、容器运行时及镜像拉取链路均已配置正确安装彻底成功。使用sudo systemctl enable docker --now一步到位完成开机自启设置并立即启动服务。预计字数400-600 字4. 总结本文完整梳理了 Ubuntu 下 Docker 的卸载与重装流程重点解决了卸载残留导致的 masked 报错问题。按照上述步骤操作即可在干净的环境中顺利安装并运行 Docker。建议读者在操作前备份重要数据并确认当前 Ubuntu 版本对应的软件源配置。预计字数200-300 字参考资料Docker 官方安装文档https://docs.docker.com/engine/install/ubuntu/Ubuntu 官方文档https://ubuntu.com/server/docssystemd 单元文件管理手册man systemd.unit预计字数100-200 字
返回列表