我最近开始使用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/