docker-compose,如何在容器启动后运行 bash 命令,而不覆盖 docker 拉入的映像中的 CMD 或 ENTRYPOINT?

Mla*_*den 17 docker-compose docker-entrypoint

我只是想重命名一些文件,而不覆盖 docker 拉入的 wordpress 图像中的命令。在 docker-compose.yml 中,我尝试使用“command”和“entrypoint”来运行 bash 命令,两者基本上都会中断正在执行的操作发生在图像内部,但一切都失败了。

Yag*_*ann 5

在容器启动后,您可以通过三种主要方式运行命令:

  1. 从命令行docker exec -d someContainer some command
  2. 来自CMD ["some", "command"]你的 Dockerfile
  3. 来自command: some commanddocker-compose 文件

如果这些都不适合你,那么你可能做错了什么。command一个常见的错误是在 docker-compose 文件中使用多个,如下所示:

version: '3.8'
services:
  someService:
    command: a command
    command: another command
Run Code Online (Sandbox Code Playgroud)

这是行不通的,因为最后一个命令覆盖了上面的命令,你应该做的是连接命令:

version: '3.8'
services:
  someService:
    command: a command && another command
Run Code Online (Sandbox Code Playgroud)

看看这个问题

编辑:我忘记包括的一件事是,上面相同的行为对于Dockerfile 中的CMD来说是正确的,你不能这样做:

CMD ["some", "command"]
CMD ["another", "command"]
Run Code Online (Sandbox Code Playgroud)

相反,您应该连接命令,就像 docker-compose 一样:

CMD ["some", "command", "&&", "another", "command"]
Run Code Online (Sandbox Code Playgroud)

但如果你有很多命令,这会很无聊,所以另一种方法是使用包含你需要的所有命令的 shell 脚本,并在 Dockerfile 中执行它:

#!/bin/sh
# bash file with your commands

run wordpress && rename files && do something else
Run Code Online (Sandbox Code Playgroud)
# later in your Dockerfile
CMD ["sh", "/path/to/file.sh"]
Run Code Online (Sandbox Code Playgroud)

看到这个问题

由于您没有提供任何代码,所以很难说,而且,也许您可​​以RUN command to rename在 Dockerfile 中用作最后一个命令(如果您正在使用它,就在 CMD 之前),以在构建时重命名这些文件(恕我直言,这使更多这是有道理的,因为这是你在构建图像时应该做的事情)。因此,如果您需要更多帮助,请也包含您的代码。

  • 您描述的这些方法不会覆盖 docker 拉入的映像中的 CMD 或 ENTRYPOINT 吗?这是我的主要要求 (5认同)