java.io.File.setReadable(false) har ingen effekt inde i docker
Dokumentationen for File.canRead()
indeholder en note om, at resultatet kan være forvirrende:
public boolean canRead()
Tester, om applikationen kan læse filen, der er angivet med dette abstrakte stinavn. På nogle platforme kan det være muligt at starte den virtuelle Java-maskine med særlige privilegier, der tillader den at læse filer, der er markeret som ulæselige. Derfor kan denne metode returnere true
selvom filen ikke har læsetilladelser.
Under docker-processer kører normalt som root, hvilket giver dem privilegier, der ikke er set af almindelige brugere.
Bevis på, at root kan læse filer, der mangler læsetilladelse:
$ echo abcd > somefile
$ ls -l somefile
-rw-rw-r-- 1 leon leon 5 Aug 26 21:43 somefile
$ cat somefile
abcd
$ chmod a-rw somefile
$ ls -l somefile
---------- 1 leon leon 5 Aug 26 21:43 somefile
$ cat somefile
cat: somefile: Permission denied
$ sudo cat somefile
abcd
Jeg har set lignende resultater. Files.getPosixFilePermissions returnerer de forventede værdier, men Files.isReadable og File canRead returnerer true, når false er "forventet"
Tilføjelse af bruger-id'et til docker-kommandolinjen løser det for mig. Det er muligvis standardbrugeren af root, der er problemet