Java Files.createFile Docker 卷原子化?

Java Files.createFile Docker volume atomic?

提问人:Marc Polizzi 提问时间:2/2/2023 更新时间:2/2/2023 访问量:38

问:

我正在使用:

Files.createFile("/tmp/marker.txt") 

从装载同一 Docker 卷的两个不同 Docker 中。Javadoc 提到此操作是原子的,因此只有一次尝试会成功:

创建一个新的空文件,如果该文件已存在,则失败。这 检查文件是否存在以及新文件的创建 如果它不存在,则是原子的单个操作 尊重可能影响 目录。

在此方案中,此操作的行为是否仍然相同?

Java Linux Docker IO

评论

1赞 Joachim Sauer 2/2/2023
我怀疑这可能取决于使用的卷驱动程序。但话又说回来,我怀疑大部分/全部都正确处理原子文件创建。
0赞 David Maze 2/2/2023
关于绑定挂载未正确同步到容器文件系统的 SO 问题太多了,我在这里会怀疑。它还可能取决于特定的 Docker 实现;基于 VM 的解决方案(如 Minikube 或 Docker Desktop)的行为可能与直接在本机 Linux 上的 Docker 不同。如果你只是想要某种分布式锁,你能使用数据库事务或像 Redis 这样的系统,而不是文件系统吗?
0赞 Marc Polizzi 2/3/2023
@DavidMaze我们仍在调查各种可能性;你有 1 或 2 个关于 SO 问题的链接吗?

答: 暂无答案