Dockerfile:CMD 与 ENTRYPOINT

发布: (2025年12月14日 GMT+8 00:31)
2 min read
原文: Dev.to

Source: Dev.to

Ubuntu 镜像中的默认 CMD

官方的 Ubuntu 镜像定义了一个默认命令:

CMD ["/bin/bash"]

当你运行容器并提供参数时,这些参数会替代默认的 CMD

docker run --rm --name cmd ubuntu:latest ls /home
docker run --rm --name cmd ubuntu:latest date

示例输出

# 列出 /home/ubuntu 的内容
docker run --rm --name cmd ubuntu:latest ls -l /home/ubuntu
total 0

# 显示当前日期
docker run --rm --name cmd ubuntu:latest date
Sat Dec 13 16:22:53 UTC 2025

使用 ENTRYPOINT 创建镜像

下面是一个简单的 Dockerfile,设置了 ENTRYPOINT 脚本并通过 CMD 提供默认参数。

FROM ubuntu:latest
WORKDIR /app
COPY script.sh .
RUN ["chmod", "+x", "script.sh"]
ENTRYPOINT ["/app/script.sh"]
CMD ["world"]

script.sh

#!/bin/bash
echo "Hello $1"

该脚本期望一个参数。如果在运行时未提供参数,则使用 CMD 中的值(world)。

运行镜像

使用默认参数

docker run --rm --name entrypoint entrypoint:1.0.0
# Output:
# Hello world

覆盖参数

docker run --rm --name entrypoint entrypoint:1.0.0 december
# Output:
# Hello december

关键要点

  • CMD 指令始终可以通过在运行容器时提供参数来覆盖。
  • ENTRYPOINT 本身在运行时无法被覆盖,但可以通过指定不同的 CMD(或直接在 docker run 中提供参数)来改变传递给它的参数。
  • 根据实际使用场景在 ENTRYPOINTCMD 之间做选择:ENTRYPOINT 用于固定可执行文件,CMD 用于默认参数或替代命令。
Back to Blog

相关文章

阅读更多 »