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

时间:2016-10-12 23:18:59

标签: docker

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

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

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

我收到了这个错误:

docker: Error response from daemon: oci runtime error: exec: "start.sh": executable file not found in $PATH.

但如果我改为绝对路径:

ENTRYPOINT [“/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"

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

由于

2 个答案:

答案 0 :(得分:2)

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

ENTRYPOINT ["/bin/sh", "-c", "/opt/ngcsc/start.sh","-l","kubstaging","-ssl", "false", "-srv", "api"]

请注意,当主机重新启动时,这不会使docker自动启动容器。为此,您需要--restart上的docker run标记,例如:

docker run --restart=unless-stopped -itd your_image

答案 1 :(得分:1)

如何将命令输入文件并使用CMD运行该文件? 例如:

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

# Dockerfile
# ... other commands
COPY start.sh /usr/local/bin/start/sh
CMD start.sh

start.sh应与Dockerfile位于同一路径中,并且应该是可执行的。