我正在学习码头工作,并参考在线课程。在一些舒适程度之后,我现在正在尝试制作一个dockerized java图像,一个简单的Java应用程序。
我试图在没有任何最小操作系统的情况下制作dockerized Java应用程序,因此在Dockerfile中使用FROM scratch
。以下是内容:
FROM scratch
ADD FirstJavaApp.class .
RUN yum -y install java
CMD java FirstJavaApp
据我所知,任何应用程序的dockerized图像都应该满足所有依赖项(为此目的,我在Dockerfile中添加了yum -y install 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"
但是,如果我将FROM scratch
替换为FROM centos
,它可以正常工作。据我所知,scratch
没有任何最小的操作系统,我的目标是构建只包含应用程序及其依赖关系的图像,这就是docker图像的目标。
那么我有什么遗漏或不能理解的东西吗?任何人都可以帮我理解这个吗?
答案 0 :(得分:1)
除非你有一个shell,否则你不能使用CMD
,而你没有来自scratch
的shell。通常,您会发现Java依赖于一堆不是scratch
的东西。您可以找到比centos更精细的替代品(例如Alpine),但它不适用于scratch
。