容器内的Jenkins使用docker部署服务,服务数据文件挂载问题

问题

docker 容器运行服务更推荐是那种无状态的服务,这样可以做到 " 开箱即用 ",需要持久化存储的话使用存储卷挂载数据库文件即可,这都是基于在宿主机上执行的;

现在Jenkins是在docker容器中运行,并需要使用docker部署服务;在Jenkins容器中如何将部署的项目数据库文件挂载到宿主机呢?这里Jenkins是基于可以控制宿主机docker的情况下,如何做到可以看看我的这篇文章:Docker + Jenkins + gitee 实现CICD环境搭建

怎么解决?

这里把问题抽象转化一下:在容器中使用宿主机的docker,启动一个容器,让该容器把指定目录挂载到宿主机;

结合存储卷相关的操作,找到了一个较为有效的方法:

Jenkins容器可以控制宿主机的docker;

我们做一个实验测试一下:

先创建一个volume存储卷:

bash 复制代码
docker volume create mytestvol1
docker volume ls # 查看是否创建成功

启动测试的Jenkins容器,进入Jenkins容器:

bash 复制代码
docker run -it --name mybusybox -v mytestvol1:/data busybox

在Jenkins容器中拉取一个busybox镜像并运行,把busybox镜像数据目录挂载到创建的存储卷中:

这里可以看到文件发生了变化,说明这里是busybox的目录;

验证是否挂载上:

进入busybox容器指定挂载的目录:

再打开一个终端:

查看一个存储卷信息:

bash 复制代码
docker inspect mytestvol1

进入挂载点目录:

bash 复制代码
cd /data/var/lib/docker/volumes/mytestvol1/_data

查看目录文件(这里我之前测试过一次,所以有文件):

返回原来的终端(容器终端),创建文件并写入内容

再次返回新开的终端进行查看:

发现一个新的文件test1,并且内容也是666;这也就说明挂载成功了;

在宿主机中删除掉原本的容器,再次启动busybox:

发现文件还在方法成立;

Jenkins容器和宿主机共用一个docker,利用这一特性,提前创建存储卷并进行挂载;


以上便是本文的全部内容,希望对你有所帮助,最后感谢阅读!

相关推荐
是Dream呀11 分钟前
自动化打造信息影响力:用 Web Unlocker 和 n8n 打造你的自动化资讯系统
运维·前端·爬虫·自动化
蜜汁小强11 分钟前
为 Github 创建本地 .ssh 关联 (RSA 以支持老系统)
运维·ssh·github
中草药z13 分钟前
【Linux】拆解 Linux 容器化核心:Namespace 隔离 + cgroups 资源控制,附 LXC 容器生命周期实战
运维·docker·容器·虚拟化·namespace·lxc·cgroups
草莓熊Lotso13 分钟前
Linux 程序地址空间深度解析:虚拟地址背后的真相
java·linux·运维·服务器·开发语言·c++·人工智能
猫头虎15 分钟前
【汉化中文版】OpenClaw(Clawdbot/Moltbot)第三方开源汉化中文发行版部署全指南:一键脚本/Docker/npm 三模式安装+Ubuntu 环境配置+中文汉化界面适配开源版
docker·npm·开源·aigc·ai编程·远程工作·openclaw
Jinkxs15 分钟前
【Linux】零基础入门:一篇吃透操作系统核心概念
linux·运维·服务器·网络·操作系统
懒神降世19 分钟前
基于iVentoy的PXE服务器的部署实战指南
运维·服务器·开发语言·云原生·vmware·openeuler·iventoy
feasibility.29 分钟前
基于Qwen3-VL多模态嵌入/重排序模型+Dify(docker)工作流的电商图文检索系统
人工智能·docker·多模态·教育电商·dify·rag·智能体/工作流
No8g攻城狮1 小时前
【Nginx】Nginx实现动态路由映射
运维·nginx
江畔何人初1 小时前
LVM中物理卷、物理区块、卷组、逻辑卷的概念以及它们之间的关系
linux·运维·云原生·容器·kubernetes