是否从正在运行的容器中获取docker-compose.yml文件位置?
我有一些正在运行的docker容器,它们是通过执行是否从正在运行的容器中获取docker-compose.yml文件位置?,docker,docker-compose,Docker,Docker Compose,我有一些正在运行的docker容器,它们是通过执行docker compose up创建的 是否有任何方法可以通过检查正在运行的容器来获取用于启动这些容器的相应docker-compose.yml文件的确切文件路径 据我所知,docker inspect CONTAINER\u NAME没有提供此信息,docker compose也没有提供从正在运行的容器中获取compose相关信息的方法 我想在脚本中做什么: 列出docker主机上某些正在运行的容器 获取相应的docker-compose.
docker compose up
创建的
是否有任何方法可以通过检查正在运行的容器来获取用于启动这些容器的相应docker-compose.yml文件的确切文件路径
据我所知,docker inspect CONTAINER\u NAME
没有提供此信息,docker compose也没有提供从正在运行的容器中获取compose相关信息的方法
我想在脚本中做什么:
- 列出docker主机上某些正在运行的容器
- 获取相应的docker-compose.yml文件位置
- 使用docker compose立即重新启动相应docker compose项目的所有容器
- 使用
docker ps-a|grep
- 使用
并找到您想要的找到docker compose.yml
- 使用
(执行docker compose restart
查看选项)docker compose
docker inspect
,然后它给了我应该查看的位置。具体而言:
HostConfig": {
"Binds": [
....
...
],
据我所知,docker inspect 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
如果shell没有设置${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}}'
这个问题的答案似乎随着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:~$
samuel@vmhost1:~$docker inspect fc440a1afbaa | grep com.docker.compose
“com.docker.compose.config散列”:“89069285A4783B79B421A84F2B652BECBDE148FBAD095A6D9D85AAB67ECECCC”,
“com.docker.compose.container number”:“1”,
“com.docker.compose.oneoff”:“False”,
“com.docker.compose.project”:“docker”,
“com.docker.compose.project.config_文件”:“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这是个坏主意。使用
pwd
您永远无法使用docker compose-f…
@A.B.pwd
部分的要点是,您可以在容器中插入一个标签,其中包含稍后需要的详细信息。如果您覆盖了撰写文件,请将其作为您管理的标签插入。工作目录是撰写文件中指定的上下文,它不指向撰写文件的位置。非常好,谢谢