如何通过bash函数列出所有正在运行的docker-compose文件?
最优实现方案
核心思路是直接读取Docker容器内置的Compose标签元数据,无需扫描系统进程打开的文件,准确率和执行效率都远高于lsof方案。
可用命令
仅输出所有运行中容器对应的docker-compose配置文件路径(自动去重)
docker inspect $(docker ps -q) --format '{{ index .Config.Labels "com.docker.compose.project.config_files" }}' | grep -v '^$' | sort -u
带项目名的友好格式化输出
docker inspect $(docker ps -q) --format '项目名:{{ index .Config.Labels "com.docker.compose.project" }} | 配置文件:{{ index .Config.Labels "com.docker.compose.project.config_files" }}' | grep -v '配置文件:$' | sort -u
封装为Bash函数
把以下代码添加到你的~/.bashrc(Bash用户)或~/.zshrc(Zsh用户)文件中,执行source ~/.bashrc或source ~/.zshrc生效后,直接输入dc-ps即可调用:
dc-ps() { # 无运行容器直接返回 if [ -z "$(docker ps -q)" ]; then echo "暂无运行中的Docker容器" return 0 fi # 输出去重后的compose配置文件路径 docker inspect $(docker ps -q) --format '{{ index .Config.Labels "com.docker.compose.project.config_files" }}' \ | grep -v '^$' \ | sort -u }
原方案问题说明
你最初使用的lsof方案会扫描所有系统进程打开的文件,不仅执行效率低,还会返回大量容器挂载文件、系统相关文件等冗余内容,需要额外做多层过滤,且很容易出现漏判或误判,不推荐使用。
内容的提问来源于stack exchange,提问作者kvelev
相关产品推荐
相关产品推荐

