为什么 docker-compose ps 在不同的目录中不能正确运行?

jco*_*lum 4 docker docker-compose

运行docker-compose 演练。

有一次它说

docker-compose run 命令允许您为您的服务运行一次性命令。例如,要查看哪些环境变量可用于 Web 服务:

$ docker-compose 运行网络环境

当我第一次运行它时,我的第二个 bash 终端在不同的目录中打开:

$ docker-compose run web env
ERROR: No such service: web
Run Code Online (Sandbox Code Playgroud)

奇怪,所以我跑了

$ docker-compose ps
Name   Command   State   Ports
------------------------------
Run Code Online (Sandbox Code Playgroud)

我很困惑。所以我在另一个窗口中运行了命令:

? docker-compose ps
       Name                      Command               State           Ports         
-------------------------------------------------------------------------------------
composetest_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp              
composetest_web_1     python app.py                    Up      0.0.0.0:5000->5000/tcp
Run Code Online (Sandbox Code Playgroud)

好的。有什么不同?哦,目录。

我不明白的是:为什么?不是docker-compose ps与服务交谈以找出谁在运行吗?显然不是。那么这里发生了什么?最好的猜测是 docker 正在读取 compose 文件,然后使用服务的名称等来过滤正在运行的 docker 镜像列表。如果在运行命令的同一目录中没有找到 compose 文件,它就不会返回所有正在运行的容器,这有点令人惊讶。

Tar*_*ani 6

docker-compose是基于项目的。它需要docker-compose.yml当前目录或任何父目录中的文件。它只会显示与当前适用的服务相关的服务docker-compose.yml。如果您想查看正在运行的所有内容docker psdocker exec用于运行命令。但是,如果您想在docker-compose项目中执行此操作,那么您的当前目录很重要,请尝试将其保留为docker-compose.yml直接存在于同一目录中的目录