Bash 为什么docker compose exec只在某些服务上工作?

Bash 为什么docker compose exec只在某些服务上工作?,bash,docker,docker-compose,sh,Bash,Docker,Docker Compose,Sh,我有一个docker compose文件,指定多个服务,如应用程序、服务器、redis和数据库。当我想访问它们时,我会执行docker compose exec application bash或docker compose exec server bash。但是当我做一个docker compose exec redis sh时,我得到一个错误错误:没有这样的服务:redis。但是,我可以通过执行docker exec-it smb redis sh来访问它。有什么区别?为什么我可以访问一些正

我有一个docker compose文件,指定多个服务,如应用程序、服务器、redis和数据库。当我想访问它们时,我会执行
docker compose exec application bash
docker compose exec server bash
。但是当我做一个
docker compose exec redis sh
时,我得到一个错误
错误:没有这样的服务:redis
。但是,我可以通过执行
docker exec-it smb redis sh
来访问它。有什么区别?为什么我可以访问一些正在运行的服务,而不能使用该命令访问其他服务?

服务名称和映像名称可能不同。我可以有一个下面的
docker compose.yml

version: "3"
mysql:
  image: redis
然后要进入redis,我需要使用

docker-compose exec mysql sh

因此,服务名称很重要,而不是该服务实际运行的内容。图像名称可以是redis或mysql或其他任何名称。

因为docker compose取决于其上下文(当前目录和docker compose.yml)。要查看可用的容器,请运行
docker compose ps
谢谢,它对我很有用,