当前位置:  开发笔记 > 编程语言 > 正文

Docker使用shell脚本运行覆盖入口点,该脚本接受参数

如何解决《Docker使用shell脚本运行覆盖入口点,该脚本接受参数》经验,为你挑选了2个好方法。

我有入口shell脚本,它接受参数-a -b.

我有工作的docker-compose.yml文件,我用指令覆盖tomcat的入口点:

entrypoint: /usr/local/tomcat/entrypoint.sh -a param1 -b param2

什么是docker run替代品?

docker run --entrypoint "/usr/local/tomcat/entrypoint.sh -a param1 -b param2" tomcat:jre8

不起作用

我明白了:

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".

供参考:

docker run --entrypoint "/usr/local/tomcat/entrypoint.sh" tomcat:jre8

从Docker的角度来看,但显然脚本失败了



1> Adrian Oprea..:

这是因为您在命令周围使用了引号.

当您运行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".

它正在尝试stat在运行之前对文件执行,因此它知道它是否存在.

将参数放在docker命令末尾的入口点,如下所示:

docker run --entrypoint     

你的命令变为:

docker run --entrypoint /usr/local/tomcat/entrypoint.sh tomcat:jre8 -a param1 -b param2 

看一下官方文档中的代码片段:

图像的ENTRYPOINT类似于COMMAND,因为它指定容器启动时要运行的可执行文件

https://docs.docker.com/engine/reference/run/#/entrypoint-default-command-to-execute-at-runtime



2> Bruno Bronos..:

我认为这也值得注意:

如果你的docker run命令有很多参数,你--entrypoint应该先来.

我不知道我的哪个论点是问题,但--entrypoint "/bin/bash"最后并没有阻止从Dockerfile执行ENTRYPOINT.我的论点包括:

1x --rm

1x --name

1x -it

3x -v

6x -p

4x -e

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有