我通过执行docker-compose up
创建了一些正在运行的docker容器。
有没有办法获取用于启动这些容器的相应 docker-compose.yml 文件的确切文件路径,只需检查正在运行的容器?
据我所知,docker inspect CONTAINER_NAME
不提供此信息, docker-compose 也不提供从正在运行的容器中获取与撰写相关的信息的方法。
我想在剧本中做些什么:
答案 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}}'