无法让脚本在容器启动时运行

时间:2021-05-28 14:54:55

标签: bash docker dockerfile containers

我有一个 Dockerfile,我在其中复制了一个名为 myscript.sh 的 shell 脚本,我想在每次从映像制作的容器启动时运行该脚本。脚本可以正常复制,但不会在容器启动时执行。容器启动后,我可以交互连接并手动运行脚本,没有问题,但它不会在启动时运行。

myscript.sh 的内容:

#!/bin/bash

mkdir -p /root/newfolder

Dockerfile:

FROM ubuntu:20.04

COPY ./src* /src
COPY ./myscript.sh /usr/local/bin

CMD ["/usr/local/bin/myscript.sh"]

我也试过:

CMD ["/bin/bash", "/usr/local/bin/myscript.sh"]

当我运行 docker run -it -d --name {container_name} {image_name} bash 时,它会从图像创建一个容器并给我 shell 提示。我检查脚本是否创建了文件夹,但没有创建。如果我然后以交互方式运行脚本,则创建的文件夹没有问题。

我查看了其他解决方案,但似乎都不起作用。我错过了什么?

1 个答案:

答案 0 :(得分:0)

您调用 docker run 命令的方式意味着您已经覆盖了图像中指定的默认 CMD

$ docker run --help                                                                             
                                                                                                
Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]    

您可以在您使用的语法中看到,为可选的 bash 参数提供了 [COMMAND]。如果省略此参数,您应该会看到您的命令确实在容器中运行。

但是,如果之后您想放入容器中的交互式 shell,那么您应该将 CMD 指令替换为 RUN 指令,然后将 bash 作为命令传递。