Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.2K
Visualizações
Get docker-compose.yml file location from running container?

I have a few running docker containers created by executing docker-compose up.

Is there any way to get the exact file path of the corresponding docker-compose.yml file used to start these containers, just by inspecting the running containers?

As far as I can see, docker inspect CONTAINER_NAME does not provide this information, nor does docker-compose provide a method to get compose-related information from a running container.

What I'd like to do in a script:

  • list certain running containers on a docker host
  • get the corresponding docker-compose.yml file locations
  • use docker-compose to restart all containers of the corresponding docker-compose projects at once
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

The answer to this question seems to have changed with new versions of docker-compose. There is a label "com.docker.compose.project.working_dir": "/var/opt/docker", that points to the directory where I started docker-compose. I have not checked if that is pwd or the actual location of the docker-compose.yml file.

This got me interesting information about docker-compose:

samuel@vmhost1:~$ 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"
samuel@vmhost1:~$ 

I'm running docker-compose.yml configuration version 3.6

over 4 years ago · Santiago Trujillo Relatório

0

It is not currently possible.

As an alternative might find the following helpful:

  • Use docker ps -a | grep <certain_container>
  • Use locate docker-compose.yml and find the one that you want
  • Use docker-compose restart (do docker-compose to see option)
over 4 years ago · Santiago Trujillo Relatório

0

Update: Since this was asked, docker compose v2 was released, which is written in Go and accessible from docker compose instead of docker-compose (there may also be a shim directing docker-compose to this new version depending on your install). This version now embeds the directory into the image labels that you can retrieve with:

docker container inspect ${container_name_or_id} \
  --format '{{ index .Config.Labels "com.docker.compose.project.working_dir" }}'

This isn't perfect for the OP's request since there may be more than one compose file, the file could be located in a different directory from where compose was run, and it doesn't capture things like environment variables or profiles that may modify how compose starts the project. However I suspect it gets most people close enough to find the source.

If you're using an older version of compose, you can use one of the options in the original answer below:


As far as I can see, docker inspect CONTAINER_NAME does not provide this information, nor does docker-compose provide a method to get compose-related information from a running container.

From an already running container that you do not control, the information is not there. You can infer the location using bind mount directories if the container creates any host mounts to relative directories. Otherwise, it's possible to deploy containers without compose, and it's possible to use compose without a compose file on the filesystem (piped via stdin), and compose does not store these details on running containers for you.


What I'd like to do in a script:

  • list certain running containers on a docker host
  • get the corresponding docker-compose.yml file locations
  • use docker-compose to restart all containers of the corresponding docker-compose projects at once

If you just want to run a restart on all containers in the same project, you don't need the first two steps, or even docker-compose. Instead, you can run:

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

Which uses a label docker-compose adds to each project it deploys.


If you want to proactively store the compose file location for later use, you can inject that as a label in your compose file:

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

If your shell does not set a ${PWD} environment variable, you can start compose with:

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

Then you can later inspect containers for this label's value with:

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

And you can chain a filter and inspect command together to find the path for a specific project:

docker ps --filter "label=com.docker.compose.project=${your_compose_project}" -q \
| xargs docker inspect --format '{{.Config.Labels.COMPOSE_PATH}}'
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda