从正在运行的容器中获取docker-compose.yml文件位置?

时间:2017-02-08 08:32:50

标签: docker docker-compose

我通过执行docker-compose up创建了一些正在运行的docker容器。

有没有办法获取用于启动这些容器的相应 docker-compose.yml 文件的确切文件路径,只需检查正在运行的容器?

据我所知,docker inspect CONTAINER_NAME不提供此信息, docker-compose 也不提供从正在运行的容器中获取与撰写相关的信息的方法。

我想在剧本中做些什么:

  • 列出Docker主机上的某些正在运行的容器
  • 获取相应的 docker-compose.yml 文件位置
  • 使用 docker-compose 立即重启相应的docker-compose项目的所有容器

4 个答案:

答案 0 :(得分:6)

这个问题的答案似乎已经随着新版本的docker-compose改变了。 有一个标签"com.docker.compose.project.working_dir": "/var/opt/docker",指向我启动docker-compose的目录。我尚未检查是否为pwd或docker-compose.yml文件的实际位置。

这给我有关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:~$ 

我正在运行docker-compose.yml配置版本3.6

答案 1 :(得分:3)

我认为你想要的东西在某个时刻是不可能的,我认为你能做的唯一事情就是:

  • 使用docker ps -a | grep <certain_container>
  • 使用locate docker-compose.yml找到您想要的
  • 使用docker-compose restart(执行docker-compose查看选项)

答案 2 :(得分:1)

您知道,您的问题对我遇到的同一问题是一个有用的答案。 我使用了docker inspect <containerID>,然后它给了我应该查看的位置。特别是在这些行中:

HostConfig": {
            "Binds": [
....
...
],

答案 3 :(得分:0)

  

据我所知,码头工人检查CONTAINER_NAME没有提供   此信息,docker-compose也未提供获取方法   从正在运行的容器中撰写相关信息。

从您无法控制的已经运行的容器中,信息不存在。如果容器在相对目录中创建了任何主机安装,则可以使用绑定安装目录来推断位置。否则,可以在没有compose的情况下部署容器,并且可以在文件系统上没有compose文件的情况下使用compose(通过stdin进行管道传输),并且compose不会为您存储这些详细信息。


  

我想在脚本中做什么:

     
      
  • 列出docker主机上某些正在运行的容器
  •   
  • 获取相应的docker-compose.yml文件位置
  •   
  • 使用docker-compose一次重新启动相应docker-compose项目的所有容器
  •   

如果只想对同一项目中的所有容器运行重新启动,则不需要前两个步骤,甚至不需要docker-compose。相反,您可以运行:

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

使用标签docker-compose为其部署的每个项目添加标签。


如果您要主动存储撰写文件的位置以备后用,可以将其作为标签注入到撰写文件中:

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

如果您的外壳未设置${PWD}环境变量,则可以开始撰写:

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

然后,您可以使用以下命令检查容器中该标签的值:

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

您可以将过滤器和检查命令链接在一起,以找到特定项目的路径:

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