Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一个简单的Java应用程序作为docker映像_Docker_Dockerfile_Docker Image - Fatal编程技术网

创建一个简单的Java应用程序作为docker映像

创建一个简单的Java应用程序作为docker映像,docker,dockerfile,docker-image,Docker,Dockerfile,Docker Image,我正在学习docker,并参考了在线课程。经过一段时间后,我现在尝试制作一个停靠的java映像,一个简单的java应用程序 我试图在没有任何最小操作系统的情况下制作DockerJava应用程序,从而在Dockerfile中从头开始使用。内容如下: FROM scratch ADD FirstJavaApp.class . RUN yum -y install java CMD java FirstJavaApp 据我所知,任何应用程序的停靠映像都应该满足所有依赖项,为此,我在Dockerfil

我正在学习docker,并参考了在线课程。经过一段时间后,我现在尝试制作一个停靠的java映像,一个简单的java应用程序

我试图在没有任何最小操作系统的情况下制作DockerJava应用程序,从而在Dockerfile中从头开始使用。内容如下:

FROM scratch
ADD FirstJavaApp.class .
RUN yum -y install java
CMD java FirstJavaApp
据我所知,任何应用程序的停靠映像都应该满足所有依赖项,为此,我在Dockerfile中添加了yum-y安装java

现在,当我使用此Dockerfile构建图像时,它给了我以下错误:

sudo docker build -t javaappusingscratch .
Sending build context to Docker daemon  377.8MB
Step 1/4 : FROM scratch
 --->
Step 2/4 : ADD FirstJavaApp.class .
 ---> Using cache
 ---> c624d7dc7c21
Step 3/4 : RUN yum -y install java
 ---> Running in 702829f38ad8
container_linux.go:265: starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory"
oci runtime error: container_linux.go:265: starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory"
然而,如果我从零开始用centos替换,它就可以正常工作。据我所知,scratch没有任何最小的操作系统,我的目标是构建只包含应用程序及其依赖项的映像,这就是docker映像的目标


那么,我有没有遗漏或不太明白的地方?有人能帮我理解这个吗?

除非你有一个shell,而且你没有从头开始的shell,否则你不能使用CMD。一般来说,您会发现Java依赖于一堆不是从头开始的东西。您可以找到比centos更轻薄的替代方案,例如Alpine,但它无法从头开始工作。

但是在从日志执行yum-y install java时出现错误,因此无法理解scratch到底提供了什么?你能把你的回复再扩展一点吗?Cmd启动一个shell。你没有壳。你没有问题。谢谢你的回复,我明白了。然而我有一个疑问,主机操作系统不提供这些缺失的东西吗?docker的这个概念不是要向容器提供服务吗,提供从主机内核到容器的服务吗?我可能完全错了,但是我觉得在这里分享这个想法。如果时间允许,请回复。