You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker中覆盖ENTRYPOINT指令参数运行报错是什么原因?

问题根因

你遇到的报错与Docker参数传递逻辑无关,是date命令本身的参数使用错误导致的。

Docker参数传递规则说明

你使用的是exec形式的ENTRYPOINT定义,对应容器启动命令的拼接逻辑如下:

  • 不带额外参数执行docker run my-app时,Docker会把Dockerfile中定义的CMD内容拼到ENTRYPOINT之后,实际执行命令为date -u,因此可以正常输出UTC时间
  • 带额外参数执行docker run my-app [自定义参数]时,你传入的参数会完全替换原CMD的内容,再拼到ENTRYPOINT之后,因此你执行docker run -it my-app -r1时,容器内实际执行的命令是date -r1,这条命令本身就不合法。

date -r1报错的具体原因

Ubuntu内置的GNU版date命令中,-r选项的作用是读取指定文件的最后修改时间,语法要求为date -r [目标文件名]。你传入的-r1会被date解析为:

  • -r选项的参数值为1,即需要读取当前工作目录下名为1的文件
  • 容器默认不存在名为1的文件,因此直接抛出date: 1: No such file or directory的错误。

正确测试用例

如果要验证ENTRYPOINT的参数覆盖效果,可以使用date的合法参数测试,例如:

  • 输出RFC 5322格式时间:docker run -it my-app -R
  • 输出自定义格式化时间:docker run -it my-app +"%Y-%m-%d %H:%M:%S"
    以上命令都可以正常运行,验证Docker的参数传递逻辑本身没有问题。

内容的提问来源于stack exchange,提问作者Brian Feeny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:39:04