提问者:小点点

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


我只想重命名一些文件,而不覆盖docker正在拉入的wordpress映像中的命令。在docker-comme. yml中,我尝试使用“命令”和“entrypoint”来运行bash命令,两者基本上都中断了映像中发生的事情,但都失败了。


共1个答案

匿名用户

在容器启动后,您有三种主要方法来运行命令:

  1. 使用docker exec-d一些容器一些命令从命令行,
  2. 使用CMD["一些","命令"]从您的Dockerfile
  3. with命令:来自docker-comhold文件的一些命令

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

version: '3.8'
services:
  someService:
    command: a command
    command: another command

这不起作用,因为最后一个命令会覆盖上面的命令,您应该做的是连接命令:

version: '3.8'
services:
  someService:
    command: a command && another command

看看这个问题。

编辑:我忘记包含的一件事是,上面的相同行为适用于Dockerfile中的CMD,您不能这样做:

CMD ["some", "command"]
CMD ["another", "command"]

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

CMD ["some", "command", "&&", "another", "command"]

但是如果你有很多命令,这是非常无聊的,所以另一种选择是使用一个外壳脚本来执行你需要的所有命令,并在你的Dockerfile中执行它:

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

run wordpress && rename files && do something else
# later in your Dockerfile
CMD ["sh", "/path/to/file.sh"]

看到这个问题

由于您还没有提供任何代码,这很难说,但是,也许您可以使用RUN命令将重命名为Dockerfile中的最后一个命令(如果您正在使用它,就在CMD之前),以便在构建时重命名这些文件(IMHO更有意义,因为这是您在构建映像时应该做的事情)。因此,如果您需要更多帮助,请包含您的代码。