Docker Java OpenJdk容器无法访问文件

时间:2019-10-19 11:05:55

标签: java docker

给出此docker文件

FROM openjdk:latest
COPY WebGenerator-1.0.0-jar-with-dependencies.jar /usr/local/lib/WebGenerator.jar
COPY webgenerator /usr/local/lib/webgenerator
EXPOSE 8085
ENTRYPOINT ["java","-jar","/usr/local/lib/WebGenerator.jar"]

我构建了一个运行WebGenerator的映像。该jar可以顺利运行,可以访问jar内嵌的资源并导出服务,但无法访问文件夹webgenerator中的文件。

请注意:

  • 通常在容器外部相同上下文中启动jar时可以访问文件
  • 该文件夹及其所有结构已正确复制到容器内。我再次检查了将整个/usr/local/lib文件夹复制到主机内部容器中并检查是否所有内容都存在。权限也可以,a + rx。是的,如果您想知道的话,webgenerator是lib中的子文件夹。

我需要一个提示来理解为什么Java无法访问这些文件。

为了完整起见,这是我用来构建和运行容器的命令。

docker build -f WebGenerator.docker -t webgenerator:1.1 .
docker run -it webgenerator:1.1

1 个答案:

答案 0 :(得分:0)

  

new File("webgenerator/wg_site/index.html").exists()返回false。

使用该相对路径,您必须在容器中set the working directory/usr/local/lib

WORKDIR /usr/local/lib

根据该工具的作用,您可能不希望将文件从主机复制到映像中,而是将它们作为卷挂载到容器中(以便该过程可以为您在主机上创建和更新文件) 。如果这是像编译器那样创建的文件,然后要在主机上使用的话,那将是正常的设置。这样,您不必在每次更改源文件时都重新构建映像。