Estoy leyendo este fragmento de Jenkins Docker README y parece que hay una sección que se contradice con mi comprensión actual. https://github.com/jenkinsci/docker/blob/master/README.md
Me parece que dice NO usar un montaje de enlace, y luego dice que es muy recomendable usar un montaje de enlace.
NOTA: Evite usar un montaje de vinculación desde una carpeta en la máquina anfitriona en /var/jenkins_home , ya que esto podría generar problemas de permisos de archivos (el usuario utilizado dentro del contenedor podría no tener derechos sobre la carpeta en la máquina anfitriona). Si realmente necesita vincular el montaje jenkins_home, asegúrese de que el usuario de jenkins pueda acceder al directorio en el host dentro del contenedor (usuario de jenkins - uid 1000) o use el parámetro -u some_other_user con docker run.
docker run -d -v jenkins_home:/var/jenkins_home -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts esto ejecutará Jenkins en modo separado con reenvío de puertos y volumen agregado. Puede acceder a los registros con el comando 'docker logs CONTAINER_ID' para verificar el primer token de inicio de sesión. La ID del contenedor se devolverá desde la salida del comando anterior.
Copia de seguridad de datos
Si vincula el montaje en un volumen, simplemente puede hacer una copia de seguridad de ese directorio (que es jenkins_home) en cualquier momento.
Esto es muy recomendable . Trate el directorio jenkins_home como lo haría con una base de datos; en Docker, generalmente colocaría una base de datos en un volumen.
¿Usas monturas de enlace? ¿Los recomendarías? ¿Por qué o por qué no? La documentación parece ser ambigua.
Como se comentó, la sintaxis utilizada es para un volumen :
docker run -d -v jenkins_home:/var/jenkins_home -n jenkins ... Eso define un volumen de Docker llamado jenkins_homes, que se creará en:
/var/lib/docker/volumes/jenkins_home .
La idea es que pueda hacer una copia de seguridad de dicho volumen fácilmente:
$ mkdir ~/backup $ docker run --rm --volumes-from jenkins -v ~/backup:/backup ubuntu bash -c “cd /var/jenkins_home && tar cvf /backup/jenkins_home.tar .”Y vuelva a cargarlo en otra instancia de Docker.
Esto difiere de bind-mounts , que implica crear una nueva imagen de Docker para poder montar un propietario de carpeta local por parte de su usuario local (en lugar del usuario predeterminado definido en la imagen oficial de Jenkins: 1000:1000 )
FROM jenkins/jenkins:lts-jdk11 USER root ENV JENKINS_HOME /var/lib/jenkins ENV COPY_REFERENCE_FILE_LOG=/var/lib/jenkins/copy_reference_file.log RUN groupmod -g <yourId>jenkins RUN usermod -u <yourGid> jenkins RUN mkdir "${JENKINS_HOME}" RUN usermod -d "${JENKINS_HOME}" jenkins RUN chown jenkins:jenkins "${JENKINS_HOME}" VOLUME /var/lib/jenkins USER jenkins Tenga en cuenta que debe declarar un nuevo volumen (aquí /var/lib/jenkins ), porque, como se ve en el número 112 de jenkinsci/docker , la ruta oficial /var/jenkins_home ya está declarada como VOLUMEN en la imagen oficial de Jenkins, y no puedes chown o chmod.
La ventaja de ese enfoque sería ver el contenido de la casa de Jenkins sin tener que usar Docker.
Lo ejecutarías con:
docker run -d -p 8080:8080 -p 50000:50000 \ --mount type=bind,source=/my/local/host/jenkins_home_dev1,target=/var/lib/jenkins \ --name myjenkins \ myjenkins:lts-jdk11-2.190.3 sleep 3 docker logs --follow --tail 10 myjenkins