我遇到了一个我想要在给定容器的运行之间保留的.json文件的情况。此外,该文件需要作为其运行的一部分附加到容器中。
我到目前为止使用的语法如下:
docker run -d -p 3001:3001 -v /usr/bob/database.json:/app/data/database.json:rw --name=myapp appImage
没有任何东西被插入到文件中(虽然我可以捕获容器内外的内容以确认它是相同的)。我已经确保运行docker的root用户(是的不是最佳实践)拥有该文件夹中的所有文件并且具有完整的rwx。
如果我在文件夹级别绑定,那么它的作用是什么:
docker run -d -p 3001:3001 -v /usr/bob:/app/data --name=myapp appImage
任何人都可以解释这个区别吗?
我觉得共享对文件夹而不是单个文件的访问不太精确,并且还会导致应用程序中的结构更改(例如,在同一文件夹中包含多个文件(加上提到的.json文件)的源代码控制)
提前感谢任何指示。
谢谢,
安德鲁
答案 0 :(得分:3)
将文件挂载为卷会在容器内安装特定的inode。修改文件的许多工具将在编写文件的新副本时更改inode。这个新的inode将作为指向该文件名的新指针存储在目录中。挂载它们的目录时,您会看到主机中的更改,但是您只能在容器内看到它,因为主机上的inode和主机目录中的指针都没有改变。
在Docker的卷教程中有关于此行为的更多详细信息:https://docs.docker.com/engine/tutorials/dockervolumes