在Docker中运行一个可执行的二进制文件(带有JET Excelsior)

我开始与Docker,试图添加我的应用程序,运行。 该应用程序是使用Jet Excelsior进行基于Java的编译。

我使用以下简单的docker文件来构build。

#Dockerfile FROM alpine:latest COPY ["/", "/sandbox"] WORKDIR /sandbox ENTRYPOINT ["myapp"] CMD ["-XX:+PrintFlagsFinal","-XX:+PrintGCDetails"] 

我用标准docker build -t sandbox .

我确认文件夹结构和所有文件已正确传输。 我通过docker run sandbox ls *做到这一点。 但是当我做docker运行沙箱时,我得到的错误:

container_linux.go:247:启动容器进程导致“exec:\”myapp \“:在$ PATH中找不到可执行文件”

我试过不使用execforms,即ENTRYPOINT / CMD myapp; 甚至ENTRYPOINT / CMD ./myapp,我得到:

/ bin / sh:myapp:找不到

谁能帮忙?

尝试复制文件而不是整个文件夹。 如果这不起作用尝试CMD [“myapp”,“arg1”,…]没有入口点。

更新:我想你可能没有复制过的文件。 您可以在容器中运行ls以查看容器中文件系统的外观。 您复制/这是您的文件系统的根目录。 你有没有想复制? (当前目录)?

WORKDIR目录(WORKDIR / myapp)中是否存在“myapp”文件? 现在将所有本地根目录(/)复制到/ sandbox容器目录。

 COPY ["/", "/sandbox"] 

如果您需要/要将根目录复制到容器中,则需要使用“myapp”的完整path,例如:

 ENTRYPOINT /full/path/in/container/to/myapp 

或者只是更新path:

 ENV PATH="/full/path/in/container/to/:${PATH}" 

但也许最好的决定是改变COPY命令:

 COPY [".", "/sandbox"] 

在发表这个问题之前,我显然看起来不够努力。 事实certificate,在JET Excelsior的知识库中,这个问题有一个具体的解决scheme 。