Docker:入口点的覆盖涉及CMD规范?

2024-04-28

这是我纯粹好奇的问题:

我必须个性化 Docker 映像,特别是这是我的 dockerfile 的摘录:

ARG DEFAULT_PHP_VERSION
FROM php:${DEFAULT_PHP_VERSION:+${DEFAULT_PHP_VERSION}-}fpm-alpine
# RUN some personal stuff
RUN rm -rf /var/www/html

# Set proper Entrypoint
COPY build/fs/usr/local/bin/my-entrypoint.sh /usr/local/bin/my-entrypoint.sh
RUN chmod +x /usr/local/bin/my-entrypoint.sh
ENTRYPOINT [ "my-entrypoint.sh" ]

WORKDIR /var/www

and my-entrypoint.sh is:

#!/bin/sh

set -e

echo "Trying my-entrypoint with args: $@"

if [ ! -z "$XDEBUG_ENABLED" ] ; then
    echo "Enabling XDEBUG"
    docker-php-ext-enable xdebug
fi

# execute default entrypoint
echo "Execute Main:"
docker-php-entrypoint $@
echo "Main Done"

原始图像是PHP-FPM-ALPINE有命令

CMD [ "php-fpm" ]

我的问题是,当我运行这个图像时(好吧,我们正确运行容器,而不是图像,我知道)默认命令不会传递给my-entrypoint.sh,实际上输出是:

Trying my-entrypoint with args: 
Enabling XDEBUG
Execute Main:
Main Done

即ENTRYPOINT没有收到默认命令php-fpm,所以主进程自动停止。

但是如果我修改 dockerfile 添加CMD在最后:

ARG DEFAULT_PHP_VERSION
FROM php:${DEFAULT_PHP_VERSION:+${DEFAULT_PHP_VERSION}-}fpm-alpine
# RUN some personal stuff
RUN rm -rf /var/www/html

# Set proper Entrypoint
COPY build/fs/usr/local/bin/my-entrypoint.sh /usr/local/bin/my-entrypoint.sh
RUN chmod +x /usr/local/bin/my-entrypoint.sh
ENTRYPOINT [ "my-entrypoint.sh" ]
CMD ["php-fpm"]

WORKDIR /var/www

一切顺利(即 CMD 被传递到入口点):

Trying my-entrypoint with args: php-fpm
Enabling XDEBUG
Execute Main:

最后我的问题是:

为什么我必须重新声明CMD ["php-fpm"]如果我改变ENTRYPOINT指示?

注意CMD ["php-fpm"]与原始图像相同。


这是从前一个图像继承值时的例外情况之一。如果父图像定义了CMD,并且您的图像定义了ENTRYPOINT,那么值CMD被清零。在所有其他场景中,您应该看到ENTRYPOINT and CMD从父图像继承不变。有关此决定背后的逻辑,请参阅问题 5147 https://github.com/moby/moby/issues/5147.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker:入口点的覆盖涉及CMD规范? 的相关文章

随机推荐

  • Ace编辑器使用javascript触发事件

    有没有类似的东西 editor getSession trigger change 我想要这个的原因是因为编辑器进出新的 所以当它返回视图时我需要它做正常的 更改 事情 但我不想等待用户输入 目前我有 editor getSession o
  • 如何解决curl php中的HTTP/1.1 400 Bad Request

    我必须打一个 aspx来自 php 代码的页面 url 我试图使用curl 来访问 但出现以下错误并且 url 中没有空格 HTTP 1 1 400 Bad Request Content Type text html charset us
  • PHP 通过 FTP 下载整个文件夹(递归)

    我目前有一个非常大的网站 大小约为 5GB 包含 60 000 个文件 当前主机并没有做太多事情来帮助我将网站转移到新主机 我的想法是在新主机上制作一个简单的脚本 通过 FTP 传输到旧主机并下载整个 public html 文件夹 递归地
  • 在进行字符识别之前使用 OpenCV 进行图像预处理(超正方体)

    我正在尝试开发简单的 PC 应用程序用于车牌识别 Java OpenCV Tess4j 图像不是很好 进一步它们会很好 我想对超立方体图像进行预处理 但我被困在车牌检测 矩形检测 上 我的步骤 1 源图像 Mat img new Mat i
  • 在 Matlab、VB6 和 VB.NET 程序之间发送消息的最简单方法

    我们正在将一套数据采集和分析例程从 VB6 程序升级为 VB NET VB6 和 Matlab 程序的混合体 我们希望保持系统模块化 单独的 EXE 以便我们可以轻松创建专门的独立分析程序 而无需不断升级大型应用程序 当所有程序都是用 VB
  • 何时在 Springs @Configuration 中将 proxyBeanMethods 设置为 false?

    当查看 spring 自动配置时源代码 https github com spring projects spring boot tree master spring boot project spring boot autoconfigu
  • 如何用Spring进行只读和读写的数据库路由

    我正在研究 Spring 中的事务路由 但我的应用程序存在运行时问题 我有两个 MySQL 数据库 一个用于读取 一个用于读 写 但是我的路由配置不起作用 当我应用只读配置时 我没有成功 这是我的配置 pom xml
  • Akka、SQS 和 Camel 的消费者投票率

    我正在做的一个项目需要从SQS读取消息 我决定使用Akka来分布式处理这些消息 由于 Camel 支持 SQS 并且在 Consumer 类中内置了 Akka 中使用的功能 因此我认为最好以这种方式实现端点并读取消息 尽管我还没有看到很多人
  • 如何在中等规模的 Rails 应用程序中组织控制器?

    我正在开发一个具有相当多相关模型的应用程序 并且想听听一些关于如何最好地组织控制器的意见 以下是我一直在考虑的一些选择 1 为控制器命名空间 例如 有一个controllers admin 目录和一个controllers public 目
  • Apache mod_rewrite:在 Windows 计算机上使用 PHP 脚本的 RewriteMap 指令

    这已经让我发疯了 我似乎无法让 RewriteMap 指令适用于 Windows 上的 php 脚本 这是我的 httpd conf 文件中的相关片段
  • 在 AspNet WebApi 帮助页面中生成模型描述

    我如何生成一个描述对于 Asp Net Web Api 帮助页面中的我的模型 Example 正如您从示例中看到的 我已经可以生成Name Type and Additional Information 但我如何生成Description
  • 部署后配置文件中缺少

    更新 我在下面有一个问题 但实际上我的问题可以通过提出一个稍微不同的问题来解决 为什么在某些机器上我的应用程序会抛出错误 Configuration system failed to initialize System Configurat
  • 由于 QCoreApplication 事件循环,QThread 永远不会退出

    Problem 所以我有一个 CommandRetriever 类来保存一些命令 并且should在不同的线程上执行这些命令 class CommandRetriever public CommandRetriever CommandRet
  • Azure DevOps API 版本定义

    尝试从其他项目复制发布模板时出现以下错误 VS402982 未为 PROJECT ENV 阶段设置保留策略 发布管道级别的保留策略已弃用 id 8 name PROJECT ENV rank 1 owner displayName Zoe
  • 根据一列删除重复项并保留最后一个条目

    我正在尝试根据一列删除重复项并保留最后一个条目 现在我的公式保持第一个值 我正在使用这篇文章中找到的公式 选择具有不同列值的所有行 Google 查询语言 https stackoverflow com questions 30318460
  • 关闭 MAMP 中的缓存

    尝试关闭 MAMP 中的缓存进行开发 在进行小更改后等待缓存过期会降低我的工作效率 当我更改为 PHP 5 5 3 时出现问题 更改回来并不能解决问题 经过研究 我采取了以下步骤来 未成功 禁用缓存 注释掉 php ini 中的 OPcac
  • 引用的项目x不存在

    大家好 我将一个项目的解决方案从vs2008升级到vs2010 但现在我有一个奇怪的问题 我在多个解决方案中引用了一个项目 3个解决方案 在其中两个解决方案中 引用出现错误 我可以添加引用 项目引用 但是当我构建时 我收到警告 引用的项目
  • iOS Siri 意图扩展“我没有看到适用于该功能的应用程序。您需要下载一个。”

    我正在编写一个 Swift 框架 其中包含 Siri 意图定义文件和代码 可从主应用程序 Today 扩展和 Siri 意图扩展中使用 我正在使用 Cocoapods 来分发框架 它位于私人存储库中 因此我无法共享框架本身 这非常适合从应用
  • JTable 中的格式化字段问题 - Integer 和 Double 之间的差异

    更新 已确认为错误当 columnClass 为 Double 时 JTable 无法将给定对象格式化为 Number 错误 ID 7051636 https bugs java com bugdatabase view bug bug i
  • Docker:入口点的覆盖涉及CMD规范?

    这是我纯粹好奇的问题 我必须个性化 Docker 映像 特别是这是我的 dockerfile 的摘录 ARG DEFAULT PHP VERSION FROM php DEFAULT PHP VERSION DEFAULT PHP VERS