我正在尝试使用java
在docker
中实现Dockerfile
FROM openjdk:7
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac welcome.java
CMD [ "java" , "welcome" ]
当我赞扬
WORKDIR
并准备了构建命令时,出现以下错误是什么原因呢?
最佳答案
WORKDIR
是您登录时容器将使用的默认目录(以及Dockerfile中任何后续relevent命令的基本目录,请参阅documentation以获取更多信息)。
如果您将其注释掉,则容器将使用基本镜像中定义的WORKDIR
。由于openjdk:7
没有定义一个(可以使用docker inspect openjdk:7 | jq '.[0].WorkingDir'
进行检查),因此默认的WORKDIR
是/
在Dockerfile中,将当前dev目录的内容复制到容器内的/usr/src/myapp
中。您用于编译文件的命令使用相对路径。
由于您删除了WORKDIR
定义,因此javac
现在正在当前目录welcome.java
中查找文件/
,并且该文件不存在。
因此,要么保留WORKDIR
定义,要么在RUN
和 CMD
定义中使用绝对路径作为类路径:
RUN javac /usr/src/myapp/welcome.java
CMD ["java", "-classpath", "/usr/src/myapp", "welcome"]
关于docker - 在Dockerfile中推荐WORKDIR时出错,这是什么原因?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59528723/