关于docker:对比entrypoint以及cmd

45次阅读

共计 792 个字符,预计需要花费 2 分钟才能阅读完成。

如何查看 现有 images 的 入口信息

docker image inspect image_id

{
  "entrypoint": "xxx"
  "cmd" : "xxx"
}

entrypoint

两种形式 ENTRYPOINT [“executable”,“param1”,“param2”] (exec 格局, 举荐) ENTRYPOINT command param1 param2 (shell 格局)

不会被 默认笼罩 然而 能够 通过 在 img 之前 通过 –entrypoint “” 进行笼罩 eg:

docker run -it --rm  --entrypoint "/bin/bash" nginx

exec 模式

exec 模式下 能够承受 默认的 cmd 或者 用户 在 img 后的 bash 参数 作为 附加参数

不会 在 参数结尾 主动追加 /bin/bash -c

shell 模式

shell 模式下 不承受 任何 参数

并且 shell 模式 会主动追加 /bin/bash -c “ 原有参数 ”

cmd 形式

cmd 反对这两种形式

exec 格局 举荐这种格局,应用这种模式时,能够不须要 shell 过程,让 Docker 利用的可执行程序成为容器的 PID 1 过程,能够接管 Unix 信号,比方执行 docker stop 时可能接管到 SIGTERM。

cmd 能够应用 用户 最初 的 参数进行笼罩

eg:

docker run -it --rm  nginx  "/bin/bash"

docker run -it --rm  nginx  "/bin/sh"

总结

在 Dockerfile 中,应该至多指定一个 CMD 和 ENTRYPOINT;将 Docker 当作可执行程序时,应该应用 ENTRYPOINT 进行配置;CMD 能够用作 ENTRYPOINT 默认参数,或者用作 Docker 的默认命令;CMD 能够被 docker run 传入的参数笼罩;docker run 传入的参数会附加到 ENTRYPOINT 之后,前提是应用了 exec 格局。

如果存在 多个 cmd 或者 entrypoint 那么 只有最初一个 无效

正文完
 0