Dokcer如何容器部署及常见问题

本文讲解通过Docker部署Jenkins过程及遇到的问题。

通过 Docker 部署 Jenkins

使用 Docker 来部署 Jenkins 是一个快速且高效的方式。以下是使用 Docker 部署 Jenkins 的分步骤指南:

1. 安装 Docker

如果你的系统上还没有安装 Docker,请根据操作系统执行以下操作:

  • 对于 Linux(以 Ubuntu 为例) :

    bash 复制代码
    sudo apt update
    sudo apt install docker.io -y
    sudo systemctl start docker
    sudo systemctl enable docker

检查 Docker 是否安装成功,查看版本:

bash 复制代码
docker --version

2. 拉取 Jenkins Docker 镜像

从 Docker Hub 拉取Jenkins的镜像(lts 长期支持版本):

bash 复制代码
docker pull jenkins/jenkins:lts

如果你想要最新版本,可以拉取:

bash 复制代码
docker pull jenkins/jenkins

3. 运行 Jenkins 容器

运行 Jenkins 时,需要暴露一些端口并挂载一个卷以保持 Jenkins 的数据持久性。

使用以下命令运行 Jenkins:

bash 复制代码
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins \
  -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
命令详解:
  • -d: 以后台模式运行容器。
  • -p 8080:8080: 将 Jenkins 内部的 8080 端口映射到主机的 8080 端口。
  • -p 50000:50000: 映射 50000 端口,用于 Jenkins 代理通信。
  • --name jenkins: 为容器命名为 "jenkins"。
  • -v jenkins_home:/var/jenkins_home: 将 Docker 卷 jenkins_home 挂载到容器内的 Jenkins 主目录。这样可以确保数据在容器重启后不会丢失。

现在你可以通过浏览器访问 Jenkins,地址为 http://localhost:8080。

4. 解锁 Jenkins

首次运行 Jenkins 时,你需要输入初始管理员密码进行解锁。

  1. 查看日志以找到管理员密码:

    bash 复制代码
    docker logs jenkins

    在日志中查找以下内容:

    复制代码
    Jenkins initial setup is required. Please use the following password to proceed to installation:
    <initialAdminPassword>
  2. 复制密码并在 Jenkins Web 界面中输入(http://localhost:8080)。

5. 安装插件和创建管理员用户

解锁 Jenkins 后:

  1. 系统会提示你安装推荐的插件。你可以选择安装推荐的插件,或手动选择特定的插件。
  2. 插件安装完成后,根据提示创建管理员用户。

6. 数据持久化和自定义配置

在前面创建的 Docker 容器中,使用的卷(jenkins_home)用于保持 Jenkins 的配置和任务数据持久化。这可以确保即使删除或停止容器,Jenkins 的数据仍然保留。

  • 你可以查看挂载的卷:

    bash 复制代码
    docker volume inspect jenkins_home

如果想使用本地目录来保存数据,可以将 jenkins_home:/var/jenkins_home 替换为主机上的一个目录路径:

bash 复制代码
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins \
  -v /path/to/your/jenkins_home:/var/jenkins_home jenkins/jenkins:lts

7. 也可以使用 Docker Compose 部署 Jenkins

如果你希望通过 Docker Compose 更方便地管理 Jenkins,可以创建一个 docker-compose.yml 文件:

yaml 复制代码
version: '3'
services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - jenkins_home:/var/jenkins_home

volumes:
  jenkins_home:

然后使用 Docker Compose 启动 Jenkins:

bash 复制代码
docker-compose up -d

8. 常见问题

  1. Jenkins 端口无法访问
    解决办法:
  • 检查容器是否运行:
bash 复制代码
docker ps

如果没有运行,检查启动日志:

bash 复制代码
docker logs jenkins
  • 确保端口没有被占用
bash 复制代码
sudo lsof -i -P -n | grep LISTEN
  1. 无法获取Jenkins初始管理员密码
    解决办法:
  • 检查启动日志
bash 复制代码
docker logs jenkins
  • 如果没有日志,确保jenkins_home目录的权限正确,尝试修改主机目录权限:
bash 复制代码
sudo chown -R 1000:1000 /path/jenkins_home
  1. Jenkins 插件安装失败或速度很慢时
    解决方法:
    一般为网络问题,通过设置代理服务器解决:在Jenkins的"Manage Jenkins" -> "Manage Plugins" ->
    "Advanced" 中的"Update Site"将默认更新站点替换为国内镜像源:
bash 复制代码
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
  1. Jenkins意外停止
    Jenkins Docker容器启动后一直正常,但一段时间后自动停止 。

可能的原因:

  • 内存不足,Jenkins使用大量内存导致Docker容器崩溃。
  • 容器资源分配不足

解决办法

  • 查看容器日志
bash 复制代码
docker logs jenkins
  • 容器资源不足时,动态的增加分配给容器内存或CPU
bash 复制代码
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins \
  -v jenkins_home:/var/jenkins_home \
  --memory=2g jenkins/jenkins:lts
  1. Jenkins数据丢失或无法保存配置时
    有时重启Jenkins后,任务丢失。

可能原因:

  • Docker容器未正确挂载
  • 文件系统权限有问题

解决办法

  • 确保正确挂载Jenkins容器的Jenkins_home目录,保证数据持久化:
bash 复制代码
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins \
  -v /path/to/your/jenkins_home:/var/jenkins_home jenkins/jenkins:lts
  • 检查挂载目录权限,确保容器有写入权限:
bash 复制代码
sudo chown -R 1000:1000 /pat/jenkins_home
相关推荐
无所畏俱的老尹2 天前
Agent 落地为什么需要影子对照:同输入只读双跑、写动作变提案、差异报警,比直接切全量更安全
人工智能·机器学习·云计算·aigc·devops
pengdott2 天前
Rocky linux9安装最新版sonarqube-26.10.0
ci/cd·devops·sonarqube
拖累斯2 天前
Jenkins + Python 全自动跑通「禅道任务/BUG 导出 → 月度开发考核表」
python·jenkins·bug
逐流人2 天前
DevOps 入门实战(一):从 CI/CD 概念到 Jenkins 自动构建部署
运维·云原生·云计算·jenkins·devops
Lyy3 天前
DevOps平台 — 第十九篇:消息通知与预警的设计与实现
后端·devops·vibecoding
长不大的杨瑞杰5 天前
OpenCode v2 配置工程实战:Config 优先级、JSONC、变量替换与多环境治理
人工智能·安全·云计算·软件工程·devops
修心光5 天前
记录一次,jenkins打包异常问题
运维·jenkins
后台模板学习5 天前
GitHub Actions 与 Jenkins 在日志监
运维·github·jenkins
cakeism8255 天前
2026 中国企业 DevOps 平台选型:从工具链到一体化平台的决策框架
运维·servlet·devops
X1A0RAN6 天前
Jenkins CI 流水线优化实践:基于提交指纹的任务缓存
缓存·ci/cd·jenkins