Ale*_*mia 6 docker docker-compose
我很难理解命名卷在docker docs的以下示例中的确切作用:
version: "3"
services:
db:
image: db
volumes:
#1
- data-volume:/var/lib/db
backup:
image: backup-service
volumes:
#2
- data-volume:/var/lib/backup/data
volumes:
data-volume:
Run Code Online (Sandbox Code Playgroud)
我的猜测是,第一次出现的命名卷(#1) 定义了卷中包含的内容,而后续出现(#2)只是将卷的内容与它们所引用的容器共享.
这个猜测是否正确?
据我了解你的猜测,你并不完全正确。
在 docker-compose 文件中声明和引用命名卷将创建一个空卷,然后可以由在其卷部分中声明的服务访问和共享该空卷。
如果要共享命名卷,则必须在 docker-compose 文件的顶级卷部分中声明该卷。示例(如您自己已链接的 docker 文档中所示):
version: "3"
services:
db:
image: db
volumes:
#1 uses the named and shared volume 'data-volume' created with #3
- data-volume:/var/lib/db
backup:
image: backup-service
volumes:
#2 uses the named and shared volume 'data-volume' created with #3
- data-volume:/var/lib/backup/data
volumes:
#3 creates the named volume 'data-volume'
data-volume:
Run Code Online (Sandbox Code Playgroud)
该卷在启动时将为空(因此该卷安装到的容器中的文件夹也是空的)。其内容将是运行时服务操作的结果。
希望这让它更清楚一点。
清单data-volume:下的顶级volumes:键在主机上创建一个名为量,如果不存在了.根据此来源,这表现如下
如果通过docker run -v my-precious-data:/ data imageName从映像运行新容器来创建命名卷,则/ data下的映像/容器中的数据将被复制到指定的卷中.
如果创建另一个容器绑定到现有的命名卷,则不会复制/覆盖新映像/容器中的任何文件,它将使用指定卷内的现有数据.
- 它们没有用于备份/导出命名卷的docker命令.但是,您可以通过"docker volume inspect [volume-name]"找到文件的实际位置.
如果卷为空并且两个容器都在目标目录中有数据,则要运行的第一个容器将其数据装入卷中,而另一个容器将看到该数据(而不是它自己的数据).我不知道哪个容器将首先运行(althoug我希望它从上到下执行),但是你可以强制与depends_on顺序如图所示这里
-------------------更新
在具有版本3 Compose文件的swarm模式下部署堆栈时,将忽略depends_on选项.
| 归档时间: |
|
| 查看次数: |
3634 次 |
| 最近记录: |