Переопределите команду docker -compose, затем выполните оригинальную команду - PullRequest
1 голос
/ 24 марта 2020

Я использую docker -композицию. Мне нужно вставить некоторое поведение в жизненный цикл запуска контейнера. (Создание собственного изображения излишне, и я хочу этого избежать.)

Обычно я переопределяю точку входа (запускаю мои команды, затем запускаю исходную точку входа), но для этого изображения я не могу, так как он выполняет важную работу .

Порядок, в котором я хочу:

  • точка входа (я не могу переопределить это, поскольку он должен запускаться раньше, чем мои вещи)
  • материал, который я хочу запустить
  • исходная команда (php-fpm)

Итак, я попробовал это:

command: >
  my_extra_command_1
  my_extra_command_2
  php-fpm

и это:

command: my_extra_command_1; my_extra_command_2; php-fpm

и это :

command: ["my_extra_command_1", "my_extra_command_2", "php-fpm"]

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

Какой правильный синтаксис?


Кстати, Dockerfile изображения определяется с использованием формы exe c следующим образом:

ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]

и сценарий точки входа заканчивается на exec "$@".

1 Ответ

2 голосов
/ 25 марта 2020

Вы должны договориться, чтобы ваша команда запускала оболочку. Синтаксис Dockerfile будет автоматически переносить команды в sh -c, но Docker Compose не будет.

command: sh -c 'my_extra_command_1; my_extra_command_2; php-fpm'

Если вы используете синтаксис списка, который разбивает его вручную на слова, аргумент -c будет единственным слово

command:
  - sh
  - -c
  - my_extra_command_1; my_extra_command_2; php-fpm
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...