docker - Docker撰写一个接一个地运行多个命令

标签 docker docker-compose rasa

我最近开始使用docker-compose进行工作,遇到一个问题,在谷歌搜索时无法获得任何有用的答案。所以我想做的是依次运行两个命令。首先,我想训练我的模型,将训练后的模型放在文件夹中。然后,第二个命令运行模型。但是,现在这两个命令同时启动,并且镜像加载两次,并且创建卷两次。

所以我的问题是,是否有可能一个接一个地运行多个命令,这如何工作?我也想知道,如何将我训练有素的模型放入运行docker-compose的卷中?我可以以某种方式设置该卷的路径作为输出吗?

到目前为止,我的docker-compose文件:

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/

最佳答案

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

您可以执行的解决方法是执行一个包装Shell脚本,以控制依赖项(鸭子和训练)在开始rasa之前已经完成了自己的工作。这意味着,如果rasa需要其他两个容器中的某些文件,则可以创建一个脚本来检查这些文件是否存在循环。如果是这样,请退出循环并运行您拥有的命令。否则,请稍等片刻,然后重试。

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

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

您可以在此处查看:https://docs.docker.com/compose/startup-order/,他们为类似的用例提供了一些示例。

关于docker - Docker撰写一个接一个地运行多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60552590/

相关文章:

docker-compose - 如何使用 docker-compose 保留 nifi 流文件?

docker - Windows 容器中的卷路径或挂载

python - 在 Docker 容器内运行 python 脚本时区错误

ruby - Bundler 无法看到安装在 dockerized 环境中的 gem

spring - Docker-compose从链接迁移到网络MongoDB数据库问题

Rasa Agent 不支持超过 23 个请求/秒

node.js - Bolt连接,Docker Compose + Neo4j + Node

php - 如何使用 Docker 设置 PHP $_SERVER 变量?

bots - rasa 核心和 botkit 框架在对话流程方面有什么区别?

rasa-nlu - 有没有办法让我的 rasa 聊天机器人知道登录用户的全名并向他打招呼?