如何使用参数创建docker入口点

use*_*967 10 docker

我遇到了这个问题真的很头疼,几乎把我的头发拉起来,但仍然无法解决。我希望 docker image 在我启动时自动启动,所以我开始使用入口点,但总是失败。

这是我通常用来启动我的应用程序的命令:

cd /opt/path ./start.sh -l dev -ssl false -srv api

我现在想在 docker 启动时自动运行这个命令。

我在 docker 文件中使用了这个:

WORKDIR /opt/ngcsc
ENTRYPOINT ["start.sh","-l","kubstaging","-ssl", "false", "-srv", "api"] 
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

docker: Error response from daemon: oci runtime error: exec: "start.sh": executable file not found in $PATH.
Run Code Online (Sandbox Code Playgroud)

但是如果我改成绝对路径:

入口点 ["/opt/ngcsc/start.sh","-l","kubstaging","-ssl", "false", "-srv", "api"] 

在我运行 docker run image 之后

我有:

standard_init_linux.go:175: exec user process caused "exec format error"
Run Code Online (Sandbox Code Playgroud)

这真的是一个大问题,我用谷歌搜索了很多,没有任何效果。你能帮我告诉我该怎么做吗?

谢谢

BMi*_*tch 4

Unix 正在寻找可执行的二进制文件来执行,而不是 shell 脚本。要运行 shell 脚本,请使用适当的 shell 调用它,例如:

ENTRYPOINT ["/bin/sh", "-c", "/opt/ngcsc/start.sh","-l","kubstaging","-ssl", "false", "-srv", "api"]
Run Code Online (Sandbox Code Playgroud)

请注意,这不会使 docker 在主机重新启动时自动启动容器。为此,您需要将--restart标志打开docker run,例如:

docker run --restart=unless-stopped -itd your_image
Run Code Online (Sandbox Code Playgroud)