Как передать аргументы в сценарий оболочки, который должен быть выполнен в контейнере - PullRequest
0 голосов
/ 22 сентября 2019

Предположим, у меня есть этот docker-compose.yml

version: '3'
services:
  webapp:
   image: some_image:repo
   container_name: my_container
   ports:
    - "8080:8080"
    #entrypoint : /home/my_tool/
   command: bash -c "/home/my_tool/runSomeScript.sh argument1 argument2  && /bin/bash"
  stdin_open: true
  tty: true

И это мой скрипт внутри образа / контейнера, который будет работать.

  $ cat runSomeScript.sh
  #!/bin/bash
  echo "First arg: $1"
  echo "Second arg: $2"

Итак, когда я выполнюКоманда docker-compose up ... я не могу передать аргументы контейнеру, который должен выполнить скрипт bash с этими значениями ...

Необходимо заметить, что если я делаю это только без аргументов, таких как:

  command: bash -c "/home/my_tool/runSomeScript.sh && /bin/bash"

, а также сценарий без аргументов, подобных этому:

   $ cat runSomeScript.sh
  #!/bin/bash
  echo "First arg: ddd"
  echo "Second arg: fff"

, затем контейнер поднимается и просто выполняет сценарий оболочки.Но с переданными аргументами это не работает.Что я здесь скучаю.

1 Ответ

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

Не зацикливайтесь на уловках, чтобы «держать ваш контейнер в рабочем состоянии».Ваш контейнер запускает свой процесс, и когда он выходит, контейнер выходит.В синтаксисе Compose вы можете упростить это до

# Compose provides an sh -c '...' wrapper for you
# Do not try to run the main container process, then a shell
command: /home/my_tool/runSomeScript.sh argument1 argument2

Если вы хотите запустить его для одноразового исполнения, вы можете docker-compose run его, предоставив свою собственную командную строку.

docker-compose run webapp /home/my_tool/runSomeScript.sh baz quux
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...