Java尝试写入Docker容器内的根目录

时间:2019-08-22 11:02:28

标签: java docker

我有问题。我不知道为什么,但是Java尝试写入docker容器 / 中的根目录,即使我通过了 -Duser.dir =“ / opt / service”

            new File("test.txt").createNewFile() 

仍然返回 权限被拒绝 。另外,将docker的workdir设置为其他文件夹而不是root。

如果我在docker中运行以下代码

    logger.info(new File(".").getAbsolutePath())

然后我得到“ /。” ,这意味着Java尝试写入根目录 如果我跑

   System.getProperty("user.dir") => "/"

错误日志

    Caused by: java.io.IOException: Permission denied
at java.base/java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.base/java.io.File.createNewFile(File.java:1024)

1 个答案:

答案 0 :(得分:0)

在命令行上用user.dir定义-D不会更改Java进程的目录。

但是,在程序刚启动时使用代码执行此操作是可行的,但是您还需要使用getAbsoluteFile()

System.setProperty("user.dir", "/opt/service");
System.out.println(new File("test.txt").getPath());
System.out.println(new File("test.txt").getAbsoluteFile().getPath());

这应该输出

test.txt
/opt/service/test.txt