【发布时间】: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,因为容器启动器位于另一个目录中...谢谢,我不能投票,但我可以接受以防万一。