我遇到了这个问题真的很头疼,几乎把我的头发拉起来仍然无法解决它。 我希望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"
这真是一个大问题,我搜索了很多,没有任何效果。你能告诉我该怎么做吗?
由于
答案 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位于同一路径中,并且应该是可执行的。