Jenkins Docker Compose 安装与使用文档
本文档用于说明如何通过 docker-compose.yaml 部署 Jenkins,并完成首次启动、初始化、日常管理与常见问题排查。
1. 环境要求
在开始之前,请确保服务器或本机已经安装:
- Docker
- Docker Compose V2
- 可用的 8080 和 50000 端口
- Linux、WSL/Linux 或可运行 Docker 的服务器环境
查看版本:
docker --version
docker compose version
如果系统使用旧版 Docker Compose,命令可能是:
docker-compose version
2. 准备目录
建议创建一个独立目录保存 Compose 文件:
mkdir -p ~/jenkins_compose
cd ~/jenkins_compose
Jenkins 数据会保存到 Docker named volume 中,不再直接绑定宿主机目录。这样可以避免不同用户路径、目录权限和环境变量带来的问题。
3. 创建 Docker Volume
Compose 启动时会自动创建 jenkins_home 数据卷,也可以提前手动创建:
docker volume create jenkins_home
查看数据卷:
docker volume ls
查看数据卷详细信息:
docker volume inspect jenkins_home
该数据卷会挂载到 Jenkins 容器的 /var/jenkins_home,用于持久化 Jenkins 的任务、插件、用户配置和系统配置。
4. docker-compose.yaml
请在 ~/jenkins_compose/docker-compose.yaml 中写入以下内容:
version: '3.8'
services:
jenkins:
image: jenkins/jenkins:lts
container_name: jenkins
privileged: true
user: root
ports:
- "8080:8080"
- "50000:50000"
volumes:
- jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
restart: unless-stopped
volumes:
jenkins_home:
name: jenkins_home
说明:
8080:8080:Jenkins Web 管理页面端口。50000:50000:Jenkins agent 连接端口。jenkins_home:/var/jenkins_home:使用 Docker named volume 持久化 Jenkins 数据。/var/run/docker.sock:允许 Jenkins 访问宿主机 Docker。/usr/bin/docker:/usr/bin/docker:把宿主机 Docker CLI 映射到 Jenkins 容器中,解决容器内没有docker命令的问题。privileged: true和user: root:方便 Jenkins 执行 Docker 相关操作,但会提高安全风险。restart: unless-stopped:系统重启或 Docker 重启后自动恢复 Jenkins 容器。volumes.jenkins_home.name:固定数据卷名称为jenkins_home,便于后续备份、恢复和迁移。
5. 启动 Jenkins
在 docker-compose.yaml 所在目录执行:
docker compose up -d
查看容器状态:
docker compose ps
查看启动日志:
docker compose logs -f jenkins
6. 首次访问与初始化
浏览器访问:
http://服务器IP:8080
本机部署时可访问:
http://localhost:8080
首次登录需要输入 Jenkins 初始管理员密码,执行:
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
然后按页面提示完成:
- 输入初始管理员密码。
- 选择安装推荐插件。
- 创建管理员账号。
- 配置 Jenkins URL。
- 进入 Jenkins 控制台。
7. 在 Jenkins 中使用 Docker
当前 Compose 配置已经挂载了宿主机 Docker Socket 和 Docker CLI:
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
这表示 Jenkins 可以通过宿主机 Docker 来构建镜像、启动容器或执行部署。
进入 Jenkins 容器检查 Docker 是否可用:
docker exec -it jenkins bash
docker version
如果容器中提示 docker: command not found,说明 Jenkins 镜像内没有 Docker CLI。可以通过映射宿主机 Docker 命令解决:
volumes:
- /usr/bin/docker:/usr/bin/docker
如果宿主机 Docker 命令不在 /usr/bin/docker,先查看实际路径:
which docker
然后把左侧宿主机路径替换为实际路径,例如:
volumes:
- /实际/docker/路径:/usr/bin/docker
也可以选择以下方式处理:
- 在 Jenkins 容器中安装 Docker CLI。
- 基于
jenkins/jenkins:lts制作自定义镜像并预装 Docker CLI。 - 使用 Jenkins agent 节点执行 Docker 构建任务。
8. 常用管理命令
停止 Jenkins:
docker compose down
启动 Jenkins:
docker compose up -d
重启 Jenkins:
docker compose restart jenkins
查看日志:
docker compose logs -f jenkins
进入容器:
docker exec -it jenkins bash
查看容器资源占用:
docker stats jenkins
9. 升级 Jenkins
拉取最新 LTS 镜像:
docker compose pull
重新创建容器:
docker compose up -d
升级前建议备份 Jenkins 数据卷:
docker run --rm \
-v jenkins_home:/volume \
-v "$PWD":/backup \
alpine \
tar -czf /backup/jenkins_home_backup.tar.gz -C /volume .
10. 备份与恢复
备份:
cd ~/jenkins_compose
docker run --rm \
-v jenkins_home:/volume \
-v "$PWD":/backup \
alpine \
tar -czf /backup/jenkins_home_$(date +%F).tar.gz -C /volume .
恢复:
cd ~/jenkins_compose
docker compose down
docker run --rm \
-v jenkins_home:/volume \
-v "$PWD":/backup \
alpine \
sh -c "rm -rf /volume/* /volume/.[!.]* /volume/..?* 2>/dev/null || true; tar -xzf /backup/jenkins_home_2026-05-30.tar.gz -C /volume"
docker compose up -d
请根据实际备份文件名替换 jenkins_home_2026-05-30.tar.gz。恢复前请确认备份文件正确,恢复操作会清空当前 jenkins_home 数据卷中的原有内容。
11. 常见问题
11.1 端口被占用
如果启动时报错 port is already allocated,说明宿主机端口已被占用。
查看占用情况:
sudo lsof -i :8080
可以修改 Compose 端口映射,例如:
ports:
- "18080:8080"
- "50000:50000"
之后访问:
http://服务器IP:18080
11.2 Docker Volume 未创建
一般情况下,执行 docker compose up -d 会自动创建 jenkins_home 数据卷。也可以手动创建:
docker volume create jenkins_home
查看数据卷是否存在:
docker volume ls
11.3 Jenkins 数据卷权限问题
如果 Jenkins 启动失败或无法写入 /var/jenkins_home,可以先查看容器日志:
docker compose logs -f jenkins
由于当前容器使用 user: root,通常不会出现数据卷写入权限问题。如果改为普通用户运行,需要重新调整 Jenkins 数据目录的属主和权限。
11.4 Jenkins 页面打不开
检查容器是否运行:
docker compose ps
查看日志:
docker compose logs -f jenkins
检查防火墙或云服务器安全组是否放行 8080 端口。
12. 安全建议
- 不建议在公网直接暴露 Jenkins 8080 端口。
- 建议通过 Nginx、HTTPS 和访问控制保护 Jenkins。
- 谨慎挂载
/var/run/docker.sock,因为这会让 Jenkins 拥有较高的宿主机 Docker 控制权限。 - 定期备份
jenkins_homeDocker volume 数据。 - 定期更新 Jenkins 和插件。
13. 快速命令汇总
cd ~/jenkins_compose
docker compose up -d
docker compose ps
docker compose logs -f jenkins
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
docker compose restart jenkins
docker compose down