如何从Docker部署的Jenkins访问宿主系统并重建ASP.NET Core容器
前置配置修正(解决两个核心前提问题)
- 首先修改你的docker-compose.yml中Jenkins服务的配置,挂载两个关键路径,从根源解决代码无法同步到宿主机、Jenkins无法操作宿主机容器的问题:
services: jenkins: # 原有配置(镜像、端口、环境变量等)全部保留 volumes: # 挂载宿主机Docker套接字,让Jenkins容器内可以直接调用宿主机Docker命令 - /var/run/docker.sock:/var/run/docker.sock # 挂载Jenkins工作目录到宿主机固定路径,拉取的代码会直接落到宿主机文件系统 - ./jenkins_home:/var/jenkins_home # 可选:如果你的ASP.NET Core的docker-compose.yml单独存放在宿主机指定目录,可额外挂载方便调用 - ./aspnet_project:/opt/aspnet_project # 配置运行用户避免Docker操作权限报错,也可配置为和宿主机docker组gid一致的普通用户 user: root
- 进入Jenkins容器安装Docker客户端和docker-compose工具,保证容器内可以正常执行Docker相关命令:
Debian/Ubuntu基础镜像执行:apt update && apt install -y docker.io docker-compose-plugin
Alpine基础镜像执行:apk add docker docker-cli-compose
流水线配置方案
你已完成的拉取代码逻辑无需修改,只需要新增镜像构建、容器重启两个阶段即可,参考Jenkinsfile配置如下:
pipeline { agent any stages { stage('拉取代码') { steps { // 你已有的Git拉取逻辑直接保留即可,代码会自动同步到宿主机的./jenkins_home/workspace/你的流水线名目录下 git url: '你的GitHub ASP.NET Core仓库地址', branch: 'main' } } stage('构建ASP.NET Core镜像') { steps { sh ''' // 切换到代码根目录,确保目录下存在ASP.NET Core对应的Dockerfile和docker-compose.yml cd /var/jenkins_home/workspace/你的流水线名 // 构建新镜像,--no-cache参数可选,避免缓存导致代码更新不生效 docker-compose build aspnet-core ''' } } stage('重启ASP.NET Core容器') { steps { sh ''' cd /var/jenkins_home/workspace/你的流水线名 // 仅重启ASP.NET Core容器,不会影响MySQL、Jenkins其他正在运行的容器 docker-compose up -d --no-deps aspnet-core // 可选:清理旧悬空镜像释放磁盘空间 docker image prune -f ''' } } } }
注意事项
- 建议将ASP.NET Core项目的Dockerfile和对应的docker-compose.yml提交到代码仓库根目录,拉取代码后可直接调用构建,无需额外复制文件
- 若你的ASP.NET Core的docker-compose.yml存放在宿主机其他目录,只需要在构建阶段前新增一步代码复制操作:
cp -r /var/jenkins_home/workspace/你的流水线名/* /opt/aspnet_project/,再切换到对应目录执行构建命令即可 - 如果执行Docker命令提示权限报错,检查宿主机
/var/run/docker.sock的权限,或者将Jenkins运行用户加入宿主机的docker用户组即可解决
内容的提问来源于stack exchange,提问作者sajjad
相关产品推荐
相关产品推荐

