DockerFile中ENTRYPOINT和CMD区别和联系

本文详细解析Dockerfile中的ENTRYPOINT与CMD指令的区别与用法,包括命令形式、参数传递及如何与docker run命令行参数交互。通过实例演示如何使用sh脚本和参数列表实现容器启动时的定制化行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在这里插入图片描述

ENTRYPOINT 入口点

ENTERPOINT 可以在docker run --entrypoint被替代

ENTRYPOINT 和 CMD 一样都可以指定容器启动时候参数

命令或者 sh 都为容器中的

命令形式

比如 dockerfile 如下:

FROM ubuntu:18.04
RUN apt-get update \
    && apt-get install -y curl \
    && rm -rf /var/lib/apt/lists/*
ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]

写成这样也是一样的效果:

FROM ubuntu:18.04
RUN apt-get update \
    && apt-get install -y curl \
    && rm -rf /var/lib/apt/lists/*
CMD [ "curl", "-s", "http://ip.cn" ]

其实就是相当于 docker run 的同时执行了curl -s http://ip.cn这个命令

但是要注意的是 docker run 后可以跟上命令,跟上的命令会自动替代掉 dockerfile 中的 CMD,但是不会替代掉 ENTRYPOINT,这是 CMD 和 ENTRYPOINT 的一个不同点

如果 dockerfile 中写的是 ENTRYPOINT 和 CMD 呢,CMD 会拼接到 ENTRYPOINT 后,作为 ENTRYPOINT 的参数

FROM ubuntu:18.04
RUN apt-get update \
    && apt-get install -y curl \
    && rm -rf /var/lib/apt/lists/*
CMD [ "-i" ]
ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]

sh 形式

由于我们在启动一个容器之前,可能需要进行一些容器中工具的初始化配置等工作,因此我们可能需要写一个 shell 脚本,然后放到 ENTRYPOINT 中去执行,ENTRYPOINT 是可以接收到 CMD 的传参的,因此 sh 可以接收到 CMD 的传参

写法是容器中 sh 文件路径

ENTRYPOINT ["root/entrypoint.sh"]

CMD 启动命令

命令为容器中的命令

命令形式

第一种

第一种和 ENTRYPOINT 一样

CMD [ "curl", "-s", "http://ip.cn" ]

第二种

CMD curl -s http://ip.cn

参数列表

CMD 指令可以作为 ENTRYPOINT 的传参

CMD ["param1", "param2", "param3"]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

abcnull

您的打赏是我创作的动力之一

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

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

打赏作者

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

抵扣说明:

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

余额充值