Dockerfile 里的CMD和ENTRYPOINT

CMD

CMD:此指令提供将在运行容器时使用的默认参数。可以通过向命令提供命令行参数来覆盖这些参数docker run。

cat Dockerfile 
from alpine
CMD ["echo", "Hello, World!"]
docker build -t my_first_image .

Screenshot-2023-06-08-162042
Screenshot-2023-06-08-162104
当您在没有额外命令行参数的情况下运行 Docker 容器时,它将执行echo "Hello, World!". 但是如果你运行docker run "image" echo "Hello, Docker!",它会覆盖CMD而不是执行echo "Hello, Docker!"。

docker run my_first_image

Screenshot-2023-06-08-162021

docker run my_first_image echo "i don' know"

Screenshot-2023-06-08-161815

ENTRYPOINT

ENTRYPOINT:该指令指定了一个命令,该命令将在容器运行时始终执行
如果该CMD指令(如果使用)将为 提供额外的参数给ENTRYPOINT。

from alpine
ENTRYPOINT ["echo"]
CMD ["Hello, World!"]

Screenshot-2023-06-08-164553
Screenshot-2023-06-08-164434

当您在没有额外命令行参数的情况下运行 Docker 容器时,它将执行echo "Hello, World!"
Screenshot-2023-06-08-164513
如果你运行docker run "image" "i dont know",echo入口点会继续执行,但是cmd不会,cmd会被自己设置的参数覆盖。
Screenshot-2023-06-08-164531