Friday, 14 November 2025

Docker - Volume - Setup using named volumes Bind Mounts

While named volumes are the standard, Docker also allows you to use Bind Mounts for persisting data. Bind mounts directly link a specific directory on the host machine to a location inside a container.


[root@devopsvm01 ~]# mkdir -p /Jenkins_Home/Jenkins_Vol

[root@devopsvm01 ~]# cd /Jenkins_Home/Jenkins_Vol

[root@devopsvm01 Jenkins_Vol]# ls -lrt

total 0

[root@devopsvm01 Jenkins_Vol]# docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

[root@devopsvm01 Jenkins_Vol]#


Spin up a new Jenkin container using the bind mount.


[root@devopsvm01 Jenkins_Vol]# docker run --name Jenkins-Bind -v /Jenkins_Home/Jenkins_Vol:/var/jenkins_home -p 8099:8080 -p 50050:50000 jenkins/jenkins:2.528.2-lts-jdk21

INSTALL WARNING: User:  missing rw permissions on JENKINS_HOME: /var/jenkins_home

touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied

Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

[root@devopsvm01 Jenkins_Vol]#


You're getting this error because Jenkins inside the container is running as user jenkins, and that user does NOT have write permission to your host folder: /Jenkins_Home/Jenkins_Vol

Here it complains , Jenkins cannot write into: /var/jenkins_home

which is mapped to your host folder.

Official Jenkins images run with: uid: 1000 and gid: 1000

So change the ownership of host folder.

[root@devopsvm01 Jenkins_Vol]# sudo chown -R 1000:1000 /Jenkins_Home/Jenkins_Vol

[root@devopsvm01 Jenkins_Vol]#

[root@devopsvm01 Jenkins_Vol]# docker run --name Jenkins-Bind -v /Jenkins_Home/Jenkins_Vol:/var/jenkins_home -p 8099:8080 -p 50050:50000 jenkins/jenkins:2.528.2-lts-jdk21

Running from: /usr/share/jenkins/jenkins.war

webroot: /var/jenkins_home/war

2025-11-03 12:05:45.791+0000 [id=1]     INFO    winstone.Logger#logInternal: Beginning extraction from war file

2025-11-03 12:05:48.690+0000 [id=1]     WARNING o.e.j.ee9.nested.ContextHandler#setContextPath: Empty contextPath

2025-11-03 12:05:49.092+0000 [id=1]     INFO    org.eclipse.jetty.server.Server#doStart: jetty-12.0.25; built: 2025-08-11T23:52:37.219Z; git: a862b76d8372e24205765182d9ae1d1d333ce2ea; jvm 21.0.9+10-LTS

2025-11-03 12:05:51.638+0000 [id=1]     INFO    o.e.j.e.w.StandardDescriptorProcessor#visitServlet: NO JSP Support for /, did not find org.eclipse.jetty.ee9.jsp.JettyJspServlet

2025-11-03 12:05:51.932+0000 [id=1]     INFO    o.e.j.s.DefaultSessionIdManager#doStart: Session workerName=node0

2025-11-03 12:05:54.148+0000 [id=1]     INFO    hudson.WebAppMain#contextInitialized: Jenkins home directory: /var/jenkins_home found at: EnvVars.masterEnvVars.get("JENKINS_HOME")

2025-11-03 12:05:54.692+0000 [id=1]     INFO    o.e.j.s.handler.ContextHandler#doStart: Started oeje9n.ContextHandler$CoreContextHandler@3c782d8e{Jenkins v2.528.2,/,b=file:///var/jenkins_home/war/,a=AVAILABLE,h=oeje9n.ContextHandler$CoreContextHandler$CoreToNestedHandler@572e6fd9{STARTED}}

2025-11-03 12:05:54.773+0000 [id=1]     INFO    o.e.j.server.AbstractConnector#doStart: Started ServerConnector@7150a6d4{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}

2025-11-03 12:05:54.849+0000 [id=1]     INFO    org.eclipse.jetty.server.Server#doStart: Started oejs.Server@3668d4{STARTING}[12.0.25,sto=0] @12218ms

2025-11-03 12:05:54.866+0000 [id=25]    INFO    winstone.Logger#logInternal: Winstone Servlet Engine running: controlPort=disabled

2025-11-03 12:05:55.372+0000 [id=24]    INFO    jenkins.model.Jenkins#<init>: Starting version 2.528.2

2025-11-03 12:05:55.836+0000 [id=31]    INFO    jenkins.InitReactorRunner$1#onAttained: Started initialization

2025-11-03 12:05:55.932+0000 [id=32]    INFO    jenkins.InitReactorRunner$1#onAttained: Listed all plugins

2025-11-03 12:06:00.327+0000 [id=32]    INFO    jenkins.InitReactorRunner$1#onAttained: Prepared all plugins

2025-11-03 12:06:00.352+0000 [id=32]    INFO    jenkins.InitReactorRunner$1#onAttained: Started all plugins

2025-11-03 12:06:00.365+0000 [id=31]    INFO    jenkins.InitReactorRunner$1#onAttained: Augmented all extensions

2025-11-03 12:06:02.005+0000 [id=31]    INFO    jenkins.InitReactorRunner$1#onAttained: System config loaded

2025-11-03 12:06:02.007+0000 [id=32]    INFO    jenkins.InitReactorRunner$1#onAttained: System config adapted

2025-11-03 12:06:02.018+0000 [id=32]    INFO    jenkins.InitReactorRunner$1#onAttained: Loaded all jobs

2025-11-03 12:06:02.029+0000 [id=32]    INFO    jenkins.InitReactorRunner$1#onAttained: Configuration for all jobs updated

2025-11-03 12:06:04.172+0000 [id=46]    INFO    hudson.util.Retrier#start: Attempt #1 to do the action check updates server

2025-11-03 12:06:05.266+0000 [id=31]    INFO    jenkins.install.SetupWizard#init:

[LF]>

[LF]> *************************************************************

[LF]> *************************************************************

[LF]> *************************************************************

[LF]>

[LF]> Jenkins initial setup is required. An admin user has been created and a password generated.

[LF]> Please use the following password to proceed to installation:

[LF]>

[LF]> c1c83809d05541de8fc845983b9b0546

[LF]>

[LF]> This may also be found at: /var/jenkins_home/secrets/initialAdminPassword

[LF]>

[LF]> *************************************************************

[LF]> *************************************************************

[LF]> *************************************************************


2025-11-03 12:06:27.597+0000 [id=32]    INFO    jenkins.InitReactorRunner$1#onAttained: Completed initialization

2025-11-03 12:06:27.670+0000 [id=24]    INFO    hudson.lifecycle.Lifecycle#onReady: Jenkins is fully up and running

2025-11-03 12:06:29.999+0000 [id=46]    INFO    h.m.DownloadService$Downloadable#load: Obtained the updated data file for hudson.tasks.Maven.MavenInstaller

2025-11-03 12:06:30.004+0000 [id=46]    INFO    hudson.util.Retrier#start: Performed the action check updates server successfully at the attempt #1


[root@devopsvm01 ~]# docker ps

CONTAINER ID   IMAGE                               COMMAND                  CREATED         STATUS         PORTS                                                                                          NAMES

df857df3c116   jenkins/jenkins:2.528.2-lts-jdk21   "/usr/bin/tini -- /u…"   6 minutes ago   Up 6 minutes   0.0.0.0:8099->8080/tcp, [::]:8099->8080/tcp, 0.0.0.0:50050->50000/tcp, [::]:50050->50000/tcp   Jenkins-Bind

[root@devopsvm01 ~]#


[root@devopsvm01 Jenkins_Vol]# pwd

/Jenkins_Home/Jenkins_Vol

[root@devopsvm01 Jenkins_Vol]# ls -lhrt

total 28K

-rw-r--r--.  1 maheshpayyan maheshpayyan  108 Nov  3 17:35 copy_reference_file.log

drwxr-xr-x. 10 maheshpayyan maheshpayyan 4.0K Nov  3 17:35 war

-rw-r--r--.  1 maheshpayyan maheshpayyan   64 Nov  3 17:35 secret.key

-rw-r--r--.  1 maheshpayyan maheshpayyan    0 Nov  3 17:35 secret.key.not-so-secret

drwxr-xr-x.  2 maheshpayyan maheshpayyan    6 Nov  3 17:35 plugins

drwxr-xr-x.  2 maheshpayyan maheshpayyan    6 Nov  3 17:35 jobs

-rw-r--r--.  1 maheshpayyan maheshpayyan  156 Nov  3 17:36 hudson.model.UpdateCenter.xml

-rw-r--r--.  1 maheshpayyan maheshpayyan  171 Nov  3 17:36 jenkins.telemetry.Correlator.xml

-rw-r--r--.  1 maheshpayyan maheshpayyan 1.1K Nov  3 17:36 nodeMonitors.xml

drwxr-xr-x.  2 maheshpayyan maheshpayyan   24 Nov  3 17:36 userContent

drwxr-xr-x.  3 maheshpayyan maheshpayyan   84 Nov  3 17:36 users

drwx------.  2 maheshpayyan maheshpayyan  125 Nov  3 17:36 secrets

-rw-r--r--.  1 maheshpayyan maheshpayyan 1.7K Nov  3 17:36 config.xml

drwxr-xr-x.  2 maheshpayyan maheshpayyan   67 Nov  3 17:36 updates

[root@devopsvm01 Jenkins_Vol]#


[root@devopsvm01 Jenkins_Vol]# docker ps --format "{{.Names}}\t{{.Mounts}}"

Jenkins-Bind    /Jenkins_Home/…

[root@devopsvm01 Jenkins_Vol]#


Now we can access Jenkins
















Remove container and verify data is persistent.


[root@devopsvm01 Jenkins_Vol]# docker ps

CONTAINER ID   IMAGE                               COMMAND                  CREATED          STATUS          PORTS                                                                                          NAMES

df857df3c116   jenkins/jenkins:2.528.2-lts-jdk21   "/usr/bin/tini -- /u…"   14 minutes ago   Up 14 minutes   0.0.0.0:8099->8080/tcp, [::]:8099->8080/tcp, 0.0.0.0:50050->50000/tcp, [::]:50050->50000/tcp   Jenkins-Bind

[root@devopsvm01 Jenkins_Vol]#

[root@devopsvm01 Jenkins_Vol]# docker stop df857df3c116

df857df3c116

[root@devopsvm01 Jenkins_Vol]# docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

[root@devopsvm01 Jenkins_Vol]#

[root@devopsvm01 Jenkins_Vol]# docker rm df857df3c116

df857df3c116

[root@devopsvm01 Jenkins_Vol]# ls -lhrt

total 32K

-rw-r--r--.  1 maheshpayyan maheshpayyan  108 Nov  3 17:35 copy_reference_file.log

drwxr-xr-x. 10 maheshpayyan maheshpayyan 4.0K Nov  3 17:35 war

-rw-r--r--.  1 maheshpayyan maheshpayyan   64 Nov  3 17:35 secret.key

-rw-r--r--.  1 maheshpayyan maheshpayyan    0 Nov  3 17:35 secret.key.not-so-secret

drwxr-xr-x.  2 maheshpayyan maheshpayyan    6 Nov  3 17:35 plugins

drwxr-xr-x.  2 maheshpayyan maheshpayyan    6 Nov  3 17:35 jobs

-rw-r--r--.  1 maheshpayyan maheshpayyan  156 Nov  3 17:36 hudson.model.UpdateCenter.xml

-rw-r--r--.  1 maheshpayyan maheshpayyan  171 Nov  3 17:36 jenkins.telemetry.Correlator.xml

-rw-r--r--.  1 maheshpayyan maheshpayyan 1.1K Nov  3 17:36 nodeMonitors.xml

drwxr-xr-x.  2 maheshpayyan maheshpayyan   24 Nov  3 17:36 userContent

drwxr-xr-x.  3 maheshpayyan maheshpayyan   84 Nov  3 17:36 users

drwx------.  2 maheshpayyan maheshpayyan  125 Nov  3 17:36 secrets

-rw-r--r--.  1 maheshpayyan maheshpayyan 1.7K Nov  3 17:36 config.xml

drwxr-xr-x.  2 maheshpayyan maheshpayyan   67 Nov  3 17:36 updates

-rw-r--r--.  1 maheshpayyan maheshpayyan  258 Nov  3 17:50 queue.xml

[root@devopsvm01 Jenkins_Vol]#



No comments:

Post a Comment

Building a Safer PostgreSQL CI/CD Pipeline with GitHub Actions: Dev → PR Review → Test Promotion

In my previous post, we explored a simple push-to-main deployment strategy . While functional, that model is not considered an industry best...