在 Dockerfile 中实现我自己的 CMD 时是不是可以不覆盖基本映像 CMD?

Posted

技术标签:

【中文标题】在 Dockerfile 中实现我自己的 CMD 时是不是可以不覆盖基本映像 CMD?【英文标题】:In a Dockerfile is possible to not override the base image CMD when implementing my own CMD?在 Dockerfile 中实现我自己的 CMD 时是否可以不覆盖基本映像 CMD? 【发布时间】:2020-10-07 18:56:24 【问题描述】:

我发现,如果我实现自己的 CMD,当我使用派生映像运行容器时,我会失去基础映像提供的所有功能。 包容性,如果我将 CMD 放在派生的 Dockerfile 中,我的容器不会继续运行...... 如何从基本映像中重用相同的 ENTRYPOINT 和 CMD,只需添加更多命令? 我想这样做是因为我想在每次运行新容器时运行某些命令。 (听起来对吗?)

示例: php:7.4.7-apache

入口点[“docker-php-入口点”]

CMD ["apache2-foreground"]

https://github.com/docker-library/php/tree/b6fd2f70018163227f0f18f3ba1fa4d70e6d929e/7.4/buster/apache

【问题讨论】:

一个 Docker 容器只运行一个命令。这可能是一个启动其他东西的脚本(或手动运行基本映像的命令),但没有办法“添加命令”。 【参考方案1】:

Docker 仅在容器启动时运行一个命令,如果您有一个基本映像和一个派生映像,它将从派生映像运行命令。或者,如果您在使用 docker run 命令时覆盖该命令/在 docker-compose 中使用不同的命令,它将优先于映像中定义的命令。

您可以创建一个 shell 文件或任何可执行文件(如容器中可用的 python 文件)来执行任意数量的命令,并在容器启动期间使用 bash shell(或任何其他可用的 shell容器)。

【讨论】:

以上是关于在 Dockerfile 中实现我自己的 CMD 时是不是可以不覆盖基本映像 CMD?的主要内容,如果未能解决你的问题,请参考以下文章

如何在单页移动 Web 应用程序中实现我自己的历史堆栈?

如何在 GUI 中实现我的 while 循环以使用 Visual Studio 在 C/C++ 中保持按键

如何在 Wordpress 中实现我的自定义登录页面?

使用Dockerfile构建镜像命令自己的理解

Dockerfile 第一个自己的镜像

Dockerfile的CMD总结