【问题标题】:DOCKER: Executing one-time commands in container after docker runDOCKER:docker run 后在容器中执行一次性命令
【发布时间】:2018-03-25 15:23:57
【问题描述】:

我的 Dockerfile 遇到了问题——我有一个包含 Web 应用程序的容器。当然,当我启动容器时,Web 应用程序也会启动,通过将我的 ENTRYPOINT 设置为 '/sbin/init',我可以让容器永远运行(如,它不只是启动和关闭)。

现在,问题是,我需要在第一次启动容器后进行一些 NFS 挂载

我知道我可以删除 ENTRYPOINT 并使用 CMD 传递让我们说 CMD ./my_create_mount_script.sh

但是,我如何确保我的容器能够像使用 ENTRYPOINT /sbin/init 时一样继续运行?

例如,

如果我在 Dockerfile 中的最后第二行是: CMD ./my_create_mount_script.sh (脚本内部只是一些安装语句),我的最后一行是: ENTRYPOINT /sbin/init 它对我没有任何好处据我了解,因为在这种情况下,ENTRYPOINT 期望 CMD 将其传递 args,仅此而已。

^ 如果有问题,我会将此容器部署到 AWS ECS

【问题讨论】:

    标签: docker containers dockerfile amazon-ecs


    【解决方案1】:

    您可以传递多个 CMD 参数,例如:

    CMD /sbin/init ; /do_something_else
    

    或者您可以创建一个脚本来执行您想要的所有操作,包括启动网络应用程序,然后将其传递给您的 ENTRYPOINT

    【讨论】:

    • 您提供的 CMD 示例似乎不起作用 - 它似乎只执行次要部分(在分号之后)。此外,如果我创建了一个简单的 .sh 文件,然后将 /sbin/init 放入其中并尝试将该文件传递给 ENTRYPOINT,则 /sbin/init(或只是 init)不会被执行。
    • 谢谢。您提供的链接非常有帮助,我能够消除我的误解。至于我的用例,我最终使用 supervisord 将 Web 应用程序作为进程 #2 启动,而我想要作为进程 #1 运行的脚本。
    • @AliKhan 不客气 :) 我很高兴能提供帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 2022-10-01
    相关资源
    最近更新 更多