如果CMD为exec格式,如何在撰写文件中运行多个命令?

时间:2020-07-31 10:42:37

标签: docker docker-compose

因此,在撰写文件中,我们可以使用命令指令覆盖原始CMD:

my-service:
   image: some-image
   command: "custom-command"

我知道我们可以通过以下方式链接多个命令: https://stackoverflow.com/a/30064175/5454794

但是,我使用的图像以exec形式包含和Entrypoint + CMD。而且我需要保留CMD中定义的参数,但是如果执行此命令中的任何其他指令,则将作为入口点的参数受到威胁。

ENTRYPOINT [ "/opt/entrypoint.sh" ]
CMD ["-flag", "flag_value"]

所以基本上我想要的是运行带有其CMD的原始ENTRYPOINT,然后运行我的脚本,该脚本需要从此exec形式中分解出来。

编辑:我无法修改dockerfile。

1 个答案:

答案 0 :(得分:1)

docker-compose文件中的command仅可以覆盖默认命令,不能添加默认命令。如果您无法修改Dockerfile,则需要以引用的相同方式链接命令

command: bash -c "command1 && command2 && ...

,但您需要从Dockerfile中的ENTRYPOINT和CMD手动复制原始命令。因此,如果您的Dockerfile中有此文件:

ENTRYPOINT [ "/opt/entrypoint.sh" ]
CMD ["-flag", "flag_value"]

然后在docker-compose中使用entrypoint(使用entrypoint代替command清除Dockerfile设置的ENTRYPOINTCMD

entrypoint: bash -c "/opt/entrypoint.sh -flag flag_value && new_command1 && ..."

来自docker documentation

设置入口点均会覆盖在上设置的任何默认入口点 服务的图片包含ENTRYPOINT Dockerfile指令,并清除了 删除图像上的任何默认命令-这意味着如果有CMD 指令在Dockerfile中被忽略。