【发布时间】:2018-05-27 12:21:27
【问题描述】:
这篇文章有点长,但请耐心等待......
假设您有一个应用程序位于本地(主机)文件系统的/app 中,具有以下结构
app
|-- index.php
|-- foo
| `-- file-h1
`-- bar
`-- file-h2
现在假设我们有一个利用以下数据结构的图像(标记为myrepo/app)
opt
|-- app
| `-- foo
| `-- file-c1
如果我们通过将主机的/app 挂载到容器的/opt/app 来从该映像运行容器,如下所示
docker container run \
-v /app:/opt/app \
myrepo/app
生成的容器数据结构如下
opt
|-- app
| |-- index.php
| |-- foo
| | `-- file-h1
| `-- bar
| `-- file-h2
到目前为止,一切都很好......
使用多个挂载(绑定挂载和卷)运行容器
现在,假设我们想使用 both 一个名为 data 的 命名卷 挂载到 /opt/app/foo 和一个 bind-mount 用于将/app 安装到/opt/app
docker container run \
-v /app:/opt/app \
-v data:/opt/app/foo
myrepo/app
容器内的结果数据结构将是:
opt
|-- app
| |-- index.php
| |-- foo
| | `-- file-c1
| `-- bar
| `-- file-h2
正如在各种帖子(如this 和this)中所述,docker 挂载按字典顺序执行(即最短路径优先)。据此,我希望 docker 先执行绑定挂载 ( -v /app:/opt/app),然后执行卷 (-v data:/opt/app/foo)。
因此,我预计主机的/app 的内容将替换/隐藏容器的/opt/app 的内容,因此file-h1 将位于/opt/app/foo 内部。最后,file-h1 将是新创建的 data 卷中的 copied,并且该卷将安装在 /opt/app/foo 上(因此应该显示 file-h1 而不是 file-c1)
当我试图理解this 对 SO 的回答时提出的问题
【问题讨论】:
标签: docker docker-compose