Как правильно токенизировать довольно сложный сценарий оболочки в токены, подходящие для docker-compose.yml - PullRequest
0 голосов
/ 23 сентября 2019

Я хочу превратить этот скрипт оболочки:

 (prog1 &) && \
 (prog2 -d -l &) && \
 sleep 0.5 && \
 prog3

в список для docker-compose:

version: '3'
services:
  math:
    command: [ "(prog1 &)", "\\&\\&", "(prog2 -d -l &)", "\\&\\&", "sleep", "0.5", "\\&\\&", "prog3" ]

Моя точка входа bash.

Где я не уверен, это:

  • как мне обращаться с подоболочками?В данный момент похоже, что bash пытается найти исполняемый файл "(prog1 &)" вместо правильного синтаксического анализа этой части.
  • что мне нужно для выхода?Кажется, я помню, что мне нужно было уйти &&, чтобы он был передан в качестве аргумента моей точке входа bash, но кроме этого я не могу получить то, что мне нужно, чтобы уйти.

1 Ответ

0 голосов
/ 23 сентября 2019

Обычно вы должны запускать это как три отдельных контейнера.В Docker Compose вы можете указать отдельный command: для каждого контейнера, даже если они построены из одного и того же образа.

version: '3'
services:
  math_prog1:
    build: .
    command: prog1
  math_prog2:
    build: .
    command: prog2

Если вам действительно нужно запустить все три вещи в одном контейнере, ваша лучшая ставкаиспользовать скрипт оболочки как есть.COPY добавьте его в ваше изображение (или, если необходимо, используйте volumes: для его внедрения) и сделайте сценарий основным процессом контейнера.Помните, что если prog1 или prog2 не удастся по какой-либо причине, у вас не будет никакой видимости в этом, и ваш единственный выход будет состоять в том, чтобы также перезапустить остальные исправные компоненты (а если prog3 не удастся, то потребуется два другихпрограммы с ним).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...