【问题标题】:Unable to get script to run at container start-up [duplicate]无法在容器启动时运行脚本 [重复]
【发布时间】:2021-08-16 20:03:27
【问题描述】:

我有一个 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 提示符。我检查脚本是否创建了文件夹,但没有。如果我随后以交互方式运行脚本,则创建的文件夹没有问题。

我查看了其他解决方案,但似乎都没有。我错过了什么?

【问题讨论】:

    标签: bash docker dockerfile containers


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 您的指导在产生我正在寻找的行为方面是准确的,但我需要在从映像创建实例时运行 shell 脚本,并且似乎在 Dockerfile 中使用 RUN 动词会导致它创建映像时运行。我正在尝试创建一个将在多个不同环境中使用的图像,并且脚本需要在目标环境中运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多