为什么docker-compose exec只能在一些服务上工作?

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

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

 version: "3" mysql: image: redis 

然后进入redis我需要使用

 docker-compose exec mysql sh 

所以服务名称很重要,而不是实际运行的服务。 图像名称可能是redis或mysql或其他任何事情。