【问题标题】:Docker Java OpenJdk Container can't access FilesDocker Java OpenJdk 容器无法访问文件
【发布时间】:2019-10-19 20:21:48
【问题描述】:

给定这个 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 文件夹并检查是否所有内容都在那里。权限也OK,a+rx。是的,如果您想知道,webgenerator 是 lib 中的一个子文件夹。

我需要一个提示来理解为什么 java 不能访问这些文件。

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

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

【问题讨论】:

  • 您遇到了什么异常?是否需要设置当前工作目录才能使任何相对文件路径正常工作?
  • 我无法访问这些文件,例如new File("webgenerator/wg_site/index.html").exists() return false。 (并且就在容器内,即使文件显然在那里)。当前的工作目录应该是相同的......但是......也许你是对的,也许容器中的不同!我要试试。
  • 使用该相对路径,您必须将工作目录设置为/usr/local/lib
  • @Thilo,是的,就是这样...我添加以添加 WORKDIR,因为容器启动器位于另一个目录中...谢谢,我不能投票,但我可以接受以防万一。

标签: java docker


【解决方案1】:

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

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

WORKDIR /usr/local/lib

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-18
    • 2018-08-09
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多