[每周一更]-(第74期):Docker-compose 部署Jenkins容器-英文版及错误纠错

1、前文概要

通过物理机部署Jenkins前文已经讲过(地址:Jenkins 物理机 安装 Jenkins),也已经公司内部平稳运行若干年,考虑到容器化的使用场景,部分项目都采用容器运行,开始考虑部署容器化的Jenkins,殊不知,这也是入坑的开始;

以下提供下最近今日几次调试遇到的错误及思路,各种命令均可在Jenkins容器内适用,目前支持:go、git、node、docker等命令

友情提示:容器化部署的Jenkins所有的操作命令都是在容器内生效;++至今没解决的事:在Jenkins中将容器内的文件拷贝到宿主机,尝试docker cp xx,基本都是通过容器的Jenkins home,拷贝到容器的某个地址,容器内操作是通顺的++;目前能想到解决方案是:Jenkins挂载的盘映射到宿主机,在宿主机配置nginx及其他,跑服务go/php等服务(问题就在于其他服务不在这个jenkins_home映射的地址里)

容器化部署Jenkins的英文版,中文版出问题走不通(go环境问题等)
jenkinsci/blueocean(中文文档Jenkins Docker 安装Jenkins及迁移流程)和

jenkins/jenkins(英文文档)

----自己配置jenkins1用于配置英文版jenkins--------

升级到版本:2.433 - 2023/11/23

复制代码
version: '3'

services:
  jenkins1:
    image: jenkins/jenkins:latest
    container_name: jenkins1
    ports:
      - "9093:8080"
      - "50000:50000"
    volumes:
      - /usr/bin/docker:/usr/bin/docker
      - /var/lib/jenkins:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/localtime:/etc/localtime- /etc/localtime:/etc/localtime
    restart: always

1.1、查看容器内的ip

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' jenkins1(容器名)

1.2.、主机访问容器 (容器访问物理机ip:端口)

curl http://<container_ip>:<container_port>

1.3、查看容器网络

docker network inspect <network_name_or_id>

1.4、查看日志

docker logs jenkins1

1.5、错误汇总

(0)问题: 启动jenkins成功,浏览器无法访问 (会有一段延迟,刷新,等待一会)

可以先进入容器,curl XGET http://localhost:8080是否有返回消息

如果有返回消息,证明Jenkins是正常的,然后ping hostIP,查看容器与host的网络是否正常;

(1)报错:JSONObject"scm" is not a JSONObject.

在配置Git仓库的时候出问题,考虑到公钥配置没问题,应该是版本问题;i

google一圈找不得答案、chatGPT也不行、最后biying.com 找到同行的解决方案

方案:版本回退4.209 或Build Timeout Plugin 更新

(2)配置go全局变量但是命令行报错:

复制代码
+ go version
/tmp/jenkins13208882337710441847.sh: 12: go: not found

解析:配置go全局路径:系统设置-安全-全局-Go,配置容器内的路径:/var/jenkins_home/go所在路径

复制代码
# 清楚go的编译缓存
go clean -modcache
go build

(3)touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Operation not permitted

复制代码
chmod -R 777 /var/lib/jenkins

(4)容器内拷贝数据出错,找不到命令(容器安装的所有操作都是容器的地址操作)

需要安装插件:Copy Artifact插件、Docker插件

配置Docker插件,再Cloud中的"Docker Host URI"字段中输入,unix:///var/run/docker.sock (配置这个无效,走 -v挂载可以)

复制代码
# 容器内创建文件,拷贝到容器里
echo "Hello World!" > output.txt
docker cp output.txt 容器名:/var/jenkins_home/

# 测试容器内命令是否有效
docker exec -it jenkins1 docker info
/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

(5)容器内无法运行docker命令

解决方案:docker-compose中配置

复制代码
# /usr/local/bin/docker 需要改为 /usr/bin/docker 挂载
volumes:
    // 这里是为了为jenkins容器能调用host主机的docker所做的映射
    - /usr/bin/docker:/usr/bin/docker
    // 此映射卷主要用于存储jenkins的配置文件到当前目录下
    - /var/lib/jenkins/:/var/jenkins_home/
    // 此映射卷主要用于执行docker镜像内的docker命令执行 共享当前docker的状态
    - /var/run/docker.sock:/var/run/docker.sock

2、最终效果图:

相关推荐
极客先躯7 分钟前
高级java每日一道面试题-2026年02月02日-实战篇[Docker]-如何实现容器的持久化存储?
docker·容器·面试宝典·持久化·存储·韵味·java高级面试题
My is 李豆1 小时前
CentOS 7 安装 Docker 完整教程(含 docker-compose 插件)
docker·eureka·centos
极客先躯1 小时前
高级java每日一道面试题-2026年02月01日-实战篇[Docker]-Docker Volume 的生命周期管理是怎样的?
java·运维·docker·容器·持久化·架构图·容器卷
kong@react2 小时前
Rocky Linux 10.2 全面解析:企业级 CentOS 替代方案及保姆级docker安装
java·linux·运维·docker
某林2123 小时前
Isaac Sim 5.1.0 无头服务器部署与 RTX 显存段错误排障全记录
运维·服务器·docker·容器·isaac
m0_738120724 小时前
Docker 环境下 Vulfocus 靶场搭建全流程(附镜像源问题解决方案)
运维·服务器·网络·安全·docker·容器
simeple4 小时前
记一次 Docker Compose 项目迁移:从 Windows Docker Desktop 迁移到 CentOS 服务器
docker
哆啦A梦——4 小时前
Ubuntu 虚拟机 Docker 与 MySQL 8.0.42 部署指南
mysql·ubuntu·docker
Plastic garden5 小时前
K8s知识(3) Pod亲和性,调度
云原生·容器·kubernetes