gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:00:29 25 4
gpt4 key购买 nike

我正在使用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"]

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

    正确的语法是什么?

    顺便说一下,镜像的Dockerfile是使用exec形式定义的,如下所示:
    ENTRYPOINT ["/entrypoint.sh"]
    CMD ["php-fpm"]

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

    最佳答案

    您需要安排让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

    关于docker - 覆盖docker-compose的命令,然后运行原始命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60837731/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com