Docker сочинять, запускать несколько команд одну за другой - PullRequest
1 голос
/ 05 марта 2020

Я недавно начал работать с docker -compose и столкнулся с проблемой, когда я не буду получать никаких полезных ответов во время поиска в Google. Итак, я хочу запустить 2 команды за другой. Сначала я хочу обучить свою модель, которая помещает обученную модель в папку. Затем вторая команда запускает модель. Однако сейчас обе команды начинаются вместе, и изображение загружается дважды, а объем создается дважды.

Итак, мой вопрос: возможно ли запускать несколько команд одну за другой, как это работает? Интересно также, как моя обученная модель помещается в том docker, на котором работает композит? Можно ли как-то установить путь к этому тому в качестве выходного файла?

Мой 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/

1 Ответ

1 голос
/ 05 марта 2020

В соответствии с документацией disabled_on , Docker compose не может определить готовность контейнера, поэтому, как только зависимости начались, последний контейнер запустится, игнорируя, если другой те готовы или нет.

Обходной путь, который вы могли бы сделать, это сделать скрипт оболочки-обертки, который контролирует, что зависимости ( утенок и обучение ) закончили выполнять свои вещи перед запуском раса . Это означает, что если rasa нужны какие-то файлы из двух других контейнеров, вы можете создать скрипт, чтобы проверить, существуют ли эти файлы с al oop. Если это так, выйдите из l oop и выполните команду, которая у вас есть. В противном случае поспите несколько секунд и повторите попытку.

Тогда команда rasa выполнит только этот скрипт, например:

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

Вы можете посмотреть здесь: https://docs.docker.com/compose/startup-order/, они сделали несколько примеров для подобного варианта использования.

...