Tengo jenkins ejecutándose dentro del contenedor y el código fuente del proyecto en github.
Necesito ejecutar el proyecto en un contenedor en el mismo host que jenkins, pero no como docker-in-docker, quiero ejecutarlos como contenedores hermanos.
Mi tubería se ve así:
Lo que hago ahora es usar el socket docker del host del contenedor jenkins:
/var/run/docker.sock:/var/run/docker.sockTengo un problema cuando el contenedor jenkins monta el volumen con el código fuente de /var/jenkins_home/workspace/BRANCH_NAME al contenedor del proyecto:
volumes: - ./servers/identity/app:/srv/appobtengo la carpeta vacía "/srv/app" en el contenedor del proyecto
Mi mejor suposición es que docker intenta montarlo desde el host y no desde el contenedor jenkins.
Entonces, la pregunta es: ¿cómo puedo configurar explícitamente el contenedor desde el cual monto el volumen?
Tuve el mismo problema al usar el contenedor acoplable de Jenkins para ejecutar otro contenedor.
Esta no es una forma recomendada, las explicaciones van aquí. Si aún necesita usar este enfoque, entonces este problema no es un problema.
Supongamos que necesitamos ejecutar otro contenedor ( ContenedorA ) dentro del contenedor de la ventana acoplable de Jenkins, el complemento de canalización de la ventana acoplable utilizará --volumes-from para montar el volumen del contenedor de Jenkins en el ContenedorA .
Si intenta usar --volume o -v para asignar un directorio específico en el contenedor de Jenkins a ContainerA , obtendrá un comportamiento inesperado.
Esto se debe a que --volumes o -v intentarían mapear directorios en host a ContainerA , en lugar de mapear desde directorios dentro del contenedor Jenkins . Si los directorios no se encuentran en el host , obtendrá un directorio vacío dentro de ContainerA .
En resumen, no podemos asignar un directorio específico del contenedor A al contenedor B, solo podemos montar los volúmenes completos del contenedor A al contenedor B, y no se admite el alias de volumen .
probar:
docker run -d --volumes-from <ContainerID> <YourImage>donde el ID del contenedor es el ID del contenedor del que desea obtener los datos de mont.
También puede crear volumen, por:
docker volume create <volname>y asignarlo a ambos contenedores
volumes: - <volname>:/srv/appCompartir el calcetín entre Host y Jenkins fue mi problema porque "/var/jenkins_home" es probablemente un volumen para el contenedor de Jenkins.
Mi solución fue instalar docker dentro de un contenedor systemd sin compartir el calcetín.
docker run -d --name jenkins \ --restart=unless-stopped \ --privileged \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -v jenkins-vol:/var/lib/jenkins \ --tmpfs /run \ --tmpfs /run/lock \ ubuntu:16.04 /sbin/initLuego instale Jenkins, Docker y Docker Compose en él.