我正在使用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 "$@"
结尾。
答案 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