覆盖docker-compose的命令,然后运行原始命令

时间:2020-03-24 19:10:44

标签: docker docker-compose

我正在使用docker-compose。我需要在容器的启动生命周期中插入一些行为。 (创建自定义图片太过夸张了,我想避免这种情况。)

通常,我会覆盖入口点(先运行命令,然后运行原始入口点),但是对于此图像,我无法执行,因为它执行了重要的工作。

我要的订单:

  • 入口点(我不能覆盖它,因为它必须在我的东西之前运行)
  • 我想运行的东西
  • 原始命令(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"]

这些都不起作用,因为容器在我执行第一个命令后停止。它不会运行所有命令。

正确的语法是什么?


BTW映像的Dockerfile是使用exec形式定义的,如下所示:

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

,入口点脚本以exec "$@"结尾。

1 个答案:

答案 0 :(得分:2)

您需要安排让Shell运行您的命令。 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