覆盖优先级关系:Dockerfile 和 docker run 中的 ENTRYPOINT 和 CMD 指令

Dockerfile 中的 ENTRYPOINT 和 CMD 指令定义了容器的默认启动命令。但是,在运行容器时,这些指令可以被 Docker run 命令行参数覆盖。

覆盖优先级关系如下:

  1. 如果在运行容器时指定了 --entrypoint 选项,则将覆盖 Dockerfile 中指定的 ENTRYPOINT 命令。
  2. 如果在运行容器时指定了命令行参数,则将覆盖 Dockerfile 中指定的 CMD 命令。
  3. 如果 Dockerfile 中指定了 ENTRYPOINT 命令,但没有指定 CMD 命令,则在运行容器时,命令行参数将成为 CMD 命令。
  4. 如果 Dockerfile 中既没有指定 ENTRYPOINT 命令,也没有指定 CMD 命令,则在运行容器时,命令行参数将被视为完整的命令,直接执行。

例如,假设有以下 Dockerfile:

FROM ubuntu

ENTRYPOINT ["/bin/echo", "Hello,"]

CMD ["world!"]

该 Dockerfile 定义了一个以 Ubuntu 为基础镜像的容器,并将 "/bin/echo""Hello," 作为 ENTRYPOINT 命令,将 "world!" 作为 CMD 命令。

如果运行容器时不指定任何参数,则将执行默认的 ENTRYPOINT 和 CMD 命令,输出如下:

$ docker run myimage

Hello, world!

如果在运行容器时指定了命令行参数,则将覆盖 CMD 命令,例如:

$ docker run myimage "GPT-3"

输出将变为:

Hello, GPT-3!

如果在运行容器时使用 --entrypoint 选项指定新的命令,则将覆盖 ENTRYPOINT 命令,例如:

$ docker run --entrypoint /bin/ls myimage /

输出将为容器根目录下的文件列表。

需要注意的是,如果在 Dockerfile 中同时指定了 ENTRYPOINT 和 CMD 命令,则在运行容器时可以通过命令行参数来覆盖 CMD 命令,但无法覆盖 ENTRYPOINT 命令,除非使用 --entrypoint 选项指定新的 ENTRYPOINT 命令。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

常鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值