Docker compose一个接一个地运行多个命令

Docker compose一个接一个地运行多个命令,docker,docker-compose,rasa,Docker,Docker Compose,Rasa,我最近开始与docker compose合作,我遇到了一个问题,在谷歌搜索时我不会得到任何有用的答案。所以我要做的是一个接一个地运行两个命令。首先,我想训练我的模型,将经过训练的模型放在文件夹中。然后,第二个命令运行模型。但是,现在两个命令一起启动,图像加载两次,卷创建两次 所以我的问题是,如果有可能一个接一个地运行多个命令,那么它是如何工作的?我也想知道,我训练过的模型是如何放入docker compose运行的卷中的?我是否可以将该卷的路径设置为输出 到目前为止,我的docker撰写文件:

我最近开始与docker compose合作,我遇到了一个问题,在谷歌搜索时我不会得到任何有用的答案。所以我要做的是一个接一个地运行两个命令。首先,我想训练我的模型,将经过训练的模型放在文件夹中。然后,第二个命令运行模型。但是,现在两个命令一起启动,图像加载两次,卷创建两次

所以我的问题是,如果有可能一个接一个地运行多个命令,那么它是如何工作的?我也想知道,我训练过的模型是如何放入docker compose运行的卷中的?我是否可以将该卷的路径设置为输出

到目前为止,我的docker撰写文件:

version: '3.3'
networks: {rasa-network: {}}
services:
  rasa:
    image: rasa/rasa:latest-full
    ports:
      - "5005:5005"
    volumes:
      - ./rasa/:/app/
    command:  run -vv -m models/test_model/ --enable-api --endpoints endpoints.yml --credentials credentials.yml
    networks: ['rasa-network']
    depends_on:
      - training
      - duckling
  duckling:
    image: rasa/duckling:latest
    ports:
      - "8000:8000"
    networks: ['rasa-network']
  training:
    build: .
    image: rasa/rasa:latest-full
    command: train --data data/ -c config.yml -d domain.yml --out models/test_model
    volumes:
      - ./rasa/:/app/

根据dependens\u on的文档,Docker compose无法确定容器的就绪状态,因此一旦依赖项启动,最后一个容器将启动,忽略其他容器是否就绪

您可以做的变通方法是编写一个包装器shell脚本,用于控制依赖项(duckling和training)在启动rasa之前是否完成了工作。这意味着,如果rasa需要其他两个容器中的一些文件,您可以创建一个脚本,用循环检查这些文件是否存在。如果是这样,请退出循环并运行已有的命令。否则,请睡眠几秒钟,然后重试

然后,rasa命令将仅执行此脚本,例如:

command: ["./wait-for-dependencies.sh", "duckling", "training"]

您可以在此处查看:,他们为类似的用例制作了一些示例。

您可以在Docker外部或图像的Dockerfile中脱机运行培训步骤吗?因此,每次在服务器上运行其他命令之前,我都需要运行培训。你所说的“在你的图片的dockerfile中”是什么意思?这是怎么回事?谢谢你的帮助!我通过创建自己的图像文件来修复它,我在其中进行培训,然后在docker compose中使用该图像。我不知道这是否是最干净的方法,但对我来说效果很好!