Saltar al contenido

¿Obtener la ubicación del archivo docker-compose.yml desde el contenedor en ejecución?

Por fin luego de tanto trabajar hemos hallado el arreglo de esta cuestión que muchos lectores de este sitio han tenido. Si tienes algún detalle que aportar no dudes en compartir tu conocimiento.

Solución:

La respuesta a esta pregunta parece haber cambiado con las nuevas versiones de docker-compose. hay una etiqueta "com.docker.compose.project.working_dir": "/var/opt/docker", que apunta al directorio donde comencé docker-compose. no he comprobado si eso es pwd o la ubicación real del archivo docker-compose.yml.

esto me dio información interesante sobre docker-compose:

[email protected]:~$ docker inspect fc440a1afbaa | grep com.docker.compose
                "com.docker.compose.config-hash": "89069285a4783b79b421ea84f2b652becbdee148fbad095a6d9d85aab67ececc",
                "com.docker.compose.container-number": "1",
                "com.docker.compose.oneoff": "False",
                "com.docker.compose.project": "docker",
                "com.docker.compose.project.config_files": "docker-compose.yml",
                "com.docker.compose.project.working_dir": "/var/opt/docker",
                "com.docker.compose.service": "jenkins",
                "com.docker.compose.version": "1.25.0"
[email protected]:~$ 

Estoy ejecutando la configuración docker-compose.yml versión 3.6

Está no actualmente posible.

Como alternativa, podría encontrar útil lo siguiente:

  • Utilizar docker ps -a | grep
  • Utilizar locate docker-compose.yml y encuentra el que quieras
  • Utilizar docker-compose restart (hacer docker-compose ver opción)

Por lo que puedo ver, docker inspect CONTAINER_NAME no proporciona esta información, ni docker-compose proporciona un método para obtener información relacionada con la redacción de un contenedor en ejecución.

Desde un contenedor que ya se está ejecutando y que no controla, la información no está allí. Puede inferir la ubicación utilizando directorios de montaje de enlace si el contenedor crea montajes de host en directorios relativos. De lo contrario, es posible implementar contenedores sin componer, y es posible usar componer sin un archivo de composición en el sistema de archivos (canalizado a través de stdin), y componer no almacena estos detalles en los contenedores en ejecución por usted.


Lo que me gustaría hacer en un script:

  • enumerar ciertos contenedores en ejecución en un host docker
  • obtener las ubicaciones correspondientes del archivo docker-compose.yml
  • use docker-compose para reiniciar todos los contenedores de los proyectos correspondientes de docker-compose a la vez

Si solo desea ejecutar un reinicio en todos los contenedores en el mismo proyecto, no necesita los primeros dos pasos, o incluso docker-compose. En su lugar, puede ejecutar:

docker ps --filter "label=com.docker.compose.project=$your_compose_project" -q 
| xargs docker restart

Que usa una etiqueta docker-compose agrega a cada proyecto que implementa.


Si desea almacenar de manera proactiva la ubicación del archivo de redacción para su uso posterior, puede insertarlo como una etiqueta en su archivo de redacción:

version: '2'
services:
  test:
    image: busybox
    command: tail -f /dev/null
    labels:
      COMPOSE_PATH: $PWD # many Linux shells define the PWD variable

Si su shell no establece un $PWD variable de entorno, puede comenzar a componer con:

PWD=$(pwd) docker-compose up -d

Luego puede inspeccionar los contenedores para el valor de esta etiqueta con:

docker inspect --format '.Config.Labels.COMPOSE_PATH' $your_container_id

Y puede encadenar un comando de filtro e inspección para encontrar la ruta de un proyecto específico:

docker ps --filter "label=com.docker.compose.project=$your_compose_project" -q 
| xargs docker inspect --format '.Config.Labels.COMPOSE_PATH'

Reseñas y calificaciones de la guía

No se te olvide dar recomendación a esta noticia si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *