为什么Docker中的入口点以运行jar的sh开头?

邓肯·奥利奥

为什么此入口点在运行jar时使用sh?ENTRYPOINT ["sh", "-c", "java -jar app.jar"]仅使用它有什么区别ENTRYPOINT ["java", "-jar", "app.jar"]

大卫·迷兹

ENTRYPOINT指令(连同CMDRUN)有两种形式。如果您使用JSON-array语法,则不会进行解释,单词拆分或任何其他处理。您传递的正是运行的内容。

# Three words
ENTRYPOINT ["java", "-jar", "app.jar"]
# You're already quoting things so spaces stay as part of each word
ENTRYPOINT ["java", "-jar", "my app.jar"]
# There is no interpolation so variable names do not get expanded --
# this looks for a file literally named `$JARFILE`
ENTRYPOINT ["java", "-jar", "$JARFILE"]
# There is only one command-line option with embedded spaces
ENTRYPOINT ["java", "-jar", "app.jar", "-a -b -c"]

在某些情况下(尤其是变量扩展),您确实需要运行shell。这就是sh -c进来,它需要一个单一的字,并处理它作为外壳命令。然后,它(大部分)会忽略所有其他选项,这意味着会CMD被有效忽略。

# This expands the environment variable `$JARFILE`, but if
# you pass additional options in `CMD`, they're lost
ENTRYPOINT ["sh", "-c", "java -jar $JARFILE"]

但是,您实际上不应使用此语法,因为Docker提供了自动为您插入纯字符串语法sh -c

# Exactly the same as above
ENTRYPOINT java -jar $JARFILE
# Three additional command-line options, since the shell does splitting
ENTRYPOINT java -jar app.jar -a -b -c

请记住,Docker将把组合成一个命令ENTRYPOINTCMD这可能会导致一个“容器为命令”模式,但你必须使用的JSON阵列形式ENTRYPOINT,并不得sh -c包装。

ENTRYPOINT ["java", "-jar", "app.jar"]
CMD ["-a", "-b", "-c"]

(还要记住,CMDdocker run命令中重写它要容易得多,并且有一种有用的模式,ENTRYPOINT用作包装脚本来进行首次设置,然后执行CMDas作为主要的容器过程。对于您所显示的简单命令,您可能会发现喜欢CMD。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在文件树中创建带有入口点的jar文件?

来自分类Dev

docker nginx部署入口点

来自分类Dev

为什么Docker“在$ PATH中找不到可执行文件`/ bin / sh`”?

来自分类Dev

为什么在编译DLL项目时收到错误LNK1561“必须定义入口点”?

来自分类Dev

默认的Docker入口点

来自分类Dev

Docker运行中的Dockerfile入口点脚本参数

来自分类Dev

入口点:“ entrypoint.sh”-docker撰写

来自分类Dev

/ bin / sh:设置docker-compose入口点时没有此类文件或目录

来自分类Dev

Docker无法运行入口点

来自分类Dev

Docker在入口点后退出

来自分类Dev

在Visual Studio 2019中,带有docker run入口点的tail命令是什么?

来自分类Dev

为什么在使用自定义入口点时webpack无法找到反应?

来自分类Dev

docker:不覆盖基本映像入口点

来自分类Dev

为什么Docker入口点脚本无法启动?

来自分类Dev

Docker,入口点异常行为

来自分类Dev

Docker运行-具有多个参数的入口点

来自分类Dev

为什么入口点地址不从0x400000开始

来自分类Dev

为什么setuptools不创建我的入口点?

来自分类Dev

为什么在ARM二进制文件上显示readelf奇数入口点地址?

来自分类Dev

Docker-无法从带有入口点的导入映像中运行容器

来自分类Dev

为什么收到“无法在DLL中找到名为'SquareRoot'的入口点”消息?

来自分类Dev

Docker入口点不会提示我输入

来自分类Dev

为什么在编译DLL项目时收到错误LNK1561“必须定义入口点”?

来自分类Dev

覆盖的docker入口点的参数

来自分类Dev

从入口点动态选择在主机上运行 Docker 的用户 GUI 和 UID

来自分类Dev

GWTP 中的多个入口点

来自分类Dev

为什么我无法在 shell 脚本中运行 docker 命令

来自分类Dev

Docker 入口点未在 jupyterhub 上以 root 身份运行

来自分类Dev

C# 中 URL Scheme 的入口点是什么?

Related 相关文章

  1. 1

    如何在文件树中创建带有入口点的jar文件?

  2. 2

    docker nginx部署入口点

  3. 3

    为什么Docker“在$ PATH中找不到可执行文件`/ bin / sh`”?

  4. 4

    为什么在编译DLL项目时收到错误LNK1561“必须定义入口点”?

  5. 5

    默认的Docker入口点

  6. 6

    Docker运行中的Dockerfile入口点脚本参数

  7. 7

    入口点:“ entrypoint.sh”-docker撰写

  8. 8

    / bin / sh:设置docker-compose入口点时没有此类文件或目录

  9. 9

    Docker无法运行入口点

  10. 10

    Docker在入口点后退出

  11. 11

    在Visual Studio 2019中,带有docker run入口点的tail命令是什么?

  12. 12

    为什么在使用自定义入口点时webpack无法找到反应?

  13. 13

    docker:不覆盖基本映像入口点

  14. 14

    为什么Docker入口点脚本无法启动?

  15. 15

    Docker,入口点异常行为

  16. 16

    Docker运行-具有多个参数的入口点

  17. 17

    为什么入口点地址不从0x400000开始

  18. 18

    为什么setuptools不创建我的入口点?

  19. 19

    为什么在ARM二进制文件上显示readelf奇数入口点地址?

  20. 20

    Docker-无法从带有入口点的导入映像中运行容器

  21. 21

    为什么收到“无法在DLL中找到名为'SquareRoot'的入口点”消息?

  22. 22

    Docker入口点不会提示我输入

  23. 23

    为什么在编译DLL项目时收到错误LNK1561“必须定义入口点”?

  24. 24

    覆盖的docker入口点的参数

  25. 25

    从入口点动态选择在主机上运行 Docker 的用户 GUI 和 UID

  26. 26

    GWTP 中的多个入口点

  27. 27

    为什么我无法在 shell 脚本中运行 docker 命令

  28. 28

    Docker 入口点未在 jupyterhub 上以 root 身份运行

  29. 29

    C# 中 URL Scheme 的入口点是什么?

热门标签

归档