与 Docker Container 共享来自主机的单个文件,并让 Container r+w 到同一个文件

Sharing a single file from host machine with Docker Container and having the Container r+w to same file

我有一个 .json 文件,我想在给定容器的运行之间保留该文件。此外,容器需要将此文件作为其一部分附加到文件中 运行。

我目前使用的语法如下:

docker run -d -p 3001:3001 -v /usr/bob/database.json:/app/data/database.json:rw --name=myapp appImage  

文件中没有插入任何内容(尽管我可以 cat 容器内外的内容以确认它们是相同的)。我已确保 运行 docker 的 root 用户(是的,这不是最佳实践)拥有该文件夹中的所有文件并具有完整的 rwx。

如果我在文件夹级别绑定,什么是有效的,例如:

docker run -d -p 3001:3001 -v /usr/bob:/app/data --name=myapp appImage

谁能解释一下区别?

我觉得共享对文件夹而不是单个文件的访问权限不太精确,并且还会导致应用程序发生结构变化(例如,具有多个文件的源代码管理(加上提到的 .json 文件) 在同一文件夹中)。

提前感谢您的指点。

谢谢,

安德鲁

将文件挂载为卷会在容器内挂载特定的 inode。许多修改文件的工具都会在写入文件的新副本时更改索引节点。这个新的 inode 将作为指向该文件名的新指针存储在目录中。挂载目录时,您会在主机中看到更改,否则您只能在容器内看到它,因为主机上的 inode 和主机目录中指向它的指针没有变化。

Docker 的卷教程中有关于此行为的更多详细信息:https://docs.docker.com/engine/tutorials/dockervolumes