docker compose:无法从yaml文件执行命令

docker compose:无法从yaml文件执行命令,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我正在尝试使用“command:”在docker-compose.yaml文件中执行wait-for-it.sh脚本。我甚至还尝试执行ls命令。它们都导致找不到命令。但是,如果我转到命令行,我可以同时运行这两个命令 以下是docker-compose.yaml文件: rabbitmq: container_name: "myapp_rabbitmq" tty: true image: rabbitmq:management ports:

我正在尝试使用“command:”在docker-compose.yaml文件中执行wait-for-it.sh脚本。我甚至还尝试执行ls命令。它们都导致找不到命令。但是,如果我转到命令行,我可以同时运行这两个命令

以下是docker-compose.yaml文件:

  rabbitmq:
     container_name: "myapp_rabbitmq"
     tty: true
     image: rabbitmq:management
     ports:
       - 15672:15672
       - 15671:15671
       - 5672:5672
     volumes:
       - /rabbitmq/lib:/var/lib/rabbitmq
       - /rabbitmq/log:/var/log/rabbitmq
       - /rabbitmq/conf:/etc/rabbitmq/
  service1:
     container_name: "service1"
     build:
       context: .
       dockerfile: ./service1.dockerfile
     links:
       - mongo
       - rabbitmq
     depends_on:
       - mongo
       - rabbitmq
     command: ["./wait-for-it.sh", "rabbitmq:5672", "-t", "90"]
  service2:
     container_name: "service2"
     build:
       context: .
       dockerfile: ./service2.dockerfile
     links:
       - mongo
       - rabbitmq
     depends_on:
       - mongo
       - rabbitmq
     command: ["./wait-for-it.sh", "rabbitmq:5672", "-t", "90"]

当命令从命令行而不是从docker compose文件工作时,是什么导致了这种情况?我正在使用“docker compose up-d”启动容器,如果有帮助的话。

如果运行时未找到
等待它。sh
,则我怀疑
等待它。sh
不在docker映像中

您可以使用Dockerfile中的说明将此文件添加到映像中


添加wait-for-it.sh/wait.sh

不确定您的目录是什么样子,但是您引用了
/service1.dockerfile
/service2/dockerfile
,这看起来很奇怪,一个路径中有一个dockerfile,另一个作为扩展名为
.docker
的文件。斜杠应该是一个点。一个V1编组文件被表示为链接,请考虑更新到至少V2,使用网络而不是链接。您正在运行哪个命令成功?不清楚您是否在由同一映像构建的容器中运行它。我的意思是,如果从终端控制台运行,命令会起作用。您需要首先使用卷将/wait-It.sh脚本装载到容器中。