Nishant Bhardwaj

在搭建好 Jenkins 并创建了第一个声明式流水线后,下一步是准备我的机器以构建 Docker 镜像。

由于我的流水线最终将从 GitHub 克隆代码、构建 Docker 镜像并将其推送到容器镜像仓库,因此 Jenkins 需要访问 Docker。如果未安装 Docker,docker build 阶段将失败,因为 Jenkins 无法执行 Docker 命令。

安装 Docker

在我的 Ubuntu 机器上,我使用以下命令安装了 Docker:

sudo apt update
sudo apt install docker.io -y

安装完成后,我通过以下命令进行了验证:

docker --version

这确认了 Docker 已成功安装并可以使用。

验证 Docker 安装

安装 Docker 只是工作的一半。下一步是检查当前用户是否有权限使用 Docker。

运行:

docker ps
预期输出

如果一切配置正确,您应该会看到类似以下的内容:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

即使没有容器正在运行,得到像上面这样的空表格也意味着 Docker 正在正常工作。

如果出现权限错误怎么办?

如果您看到如下错误:

permission denied while trying to connect to the Docker daemon socket

这意味着当前用户没有权限访问 Docker 守护进程。

首先,检查您当前登录的用户:

whoami

示例输出:

nishant

现在将您的用户添加到 docker 组:

sudo usermod -aG docker $USER

此命令的作用是什么?

usermod 修改用户帐户。
-aG 表示将用户附加到补充组,而不删除现有组。
docker 是拥有与 Docker 守护进程通信权限的组。
$USER 自动引用您当前登录的用户名。
应用更改

组成员身份不会立即生效。

您有两个选择:

选项 1(推荐):

退出您的 Ubuntu 会话,然后重新登录。这将刷新您的用户组,是最可靠的方法。

选项 2:

只需重启终端会话(或打开一个新的)。在许多情况下,仍然需要注销并重新登录才能使更改完全生效。

再次验证

再次运行命令:

docker ps

如果您现在看到一个空的容器列表而不是权限错误,则说明 Docker 已正确配置,您可以从 Jenkins 流水线中使用它。

学习笔记:这是初学者安装 Docker 后最常见的问题之一。安装成功了,但 Docker 命令因用户未添加到 docker 组而失败。