Pat*_*čin 28 docker docker-compose
我有入口shell脚本,它接受参数-a -b.
我有工作的docker-compose.yml文件,我用指令覆盖tomcat的入口点:
entrypoint: /usr/local/tomcat/entrypoint.sh -a param1 -b param2
Run Code Online (Sandbox Code Playgroud)
什么是docker run替代品?
docker run --entrypoint "/usr/local/tomcat/entrypoint.sh -a param1 -b param2" tomcat:jre8
Run Code Online (Sandbox Code Playgroud)
不起作用
我明白了:
docker: Error response from daemon:
invalid header field value "oci runtime error: container_linux.go:247:
starting container process caused \"exec:
\\\"/usr/local/tomcat/entrypoint.sh -a param1 -b param2\\\":
stat /usr/local/tomcat/entrypoint.sh -a param1 -b param2:
no such file or directory\"\n".
Run Code Online (Sandbox Code Playgroud)
供参考:
docker run --entrypoint "/usr/local/tomcat/entrypoint.sh" tomcat:jre8
Run Code Online (Sandbox Code Playgroud)
从Docker的角度来看,但显然脚本失败了
Adr*_*rea 44
这是因为您在命令周围使用了引号.
当您运行docker run --entrypoint "/usr/local/tomcat/entrypoint.sh -a param1 -b param2" tomcat:jre8Docker时,将这些引号中的任何内容视为单个脚本文件.
从错误中可以看出:
stat /usr/local/tomcat/entrypoint.sh -a param1 -b param2:
no such file or directory\"\n".
Run Code Online (Sandbox Code Playgroud)
它正在尝试stat在运行之前对文件执行,因此它知道它是否存在.
将参数放在docker命令末尾的入口点,如下所示:
docker run --entrypoint <entrypoint.sh> <image:tag> <arg1> <arg2> <arg3>
Run Code Online (Sandbox Code Playgroud)
你的命令变为:
docker run --entrypoint /usr/local/tomcat/entrypoint.sh tomcat:jre8 -a param1 -b param2
Run Code Online (Sandbox Code Playgroud)
看一下官方文档中的代码片段:
图像的ENTRYPOINT类似于COMMAND,因为它指定容器启动时要运行的可执行文件
https://docs.docker.com/engine/reference/run/#/entrypoint-default-command-to-execute-at-runtime
web*_*ars 11
注意:回答这个老问题是因为提议的答案并不令我满意,因为它们部分错误。
简短回答: 无法使用多个参数覆盖入口点,但您可以将它们移动到可以工作的命令(图像名称后面的部分)
更详细的答案:
经过一些测试和阅读文档后,很明显没有办法用 docker run 来模仿 dockerfile 或 docker-compose 入口点行为。
建议的答案是覆盖单个二进制文件的入口点(即没有参数)并将原始参数放入命令中。
这通常可以完成工作,但实际上存在概念上的差异,您可以使用 来揭示docker inspect。
在 docker 中,ENTRYPOINT 是二进制文件 + 将在启动时启动的默认参数,并且用户在正常使用时不应更改这些参数。COMMAND 是您希望用户更改的剩余参数或参数(例如: ping 的目标主机名)。因此它们在概念上是不同的。
说在许多情况下,对于一次性容器来说,将参数从入口点移动到命令并不重要,结果命令看起来是一样的。
我认为这也值得注意:
docker run命令有很多参数,你--entrypoint应该先来.我不知道我的哪个论点是问题,但--entrypoint "/bin/bash"最后并没有阻止从Dockerfile执行ENTRYPOINT.我的论点包括:
| 归档时间: |
|
| 查看次数: |
31939 次 |
| 最近记录: |