码头工人命名卷如何工作?

我是docker和volume的新手,对命名卷的工作方式感到困惑。我想知道两种情况下命名卷的工作方式

第一个场景 我必须使用docker设置两个项目,并且两个都有独立的数据库。现在如何使用/var/lib/mysql映射数据库卷?是否根据数据库名称维护单独的数据?

第二种情况 我有两个使用相同命名卷的服务。在这两个服务中,映射到命名卷的容器的路径都不同。这将如何工作?

services:
  s1:
     volume:
       - vol:/var/lib/s1
  s2:
     volume:
       - vol:/var/lib/s2
volumes:
 vol:
luopeng188020 回答:码头工人命名卷如何工作?

由于您使用的是docker-compose,因此它可以为您做一些事情。如果组成的“项目名称”为project_a,则docker-compose vol卷将命名为project_a_vol。通过运行docker volume ls进行验证。 “组合项目名称”是指项目名称,该名称通常等于运行docker-compose的目录的名称;如果设置了--project-name参数,则自定义名称(例如, docker-compose --project-name xxx up

我假设您正在使用默认的Docker卷文件系统存储驱动程序。命名卷不过是/var/lib/docker/volumes文件夹中的目录(尝试使用sudo ls -l /var/lib/docker/volumes)。通过使用vol:/var/lib/s1挂载卷,您告诉docker同步目录:

本地/var/lib/docker/volumes/project_a_vol,容器目录为/var/lib/s1

如果您通过这种方式撰写服务:

services:
  s1:
     volumes:
       - vol:/var/lib/s1
  s2:
     volumes:
       - vol:/var/lib/s2

同一目录将被安装到两个服务:s1s2,您很可能会遇到问题,因为两个服务将尝试同时读取和写入同一目录。除非这些服务可以处理这种情况。

最好有单独的卷。在这种情况下,可以清除一项服务的卷,而保留另一项服务。

,

对您的问题的一些提示。
第一个场景:两个带有一个DB的Docker容器。
 -对于这种情况,因为数据库不同,所以它们在自己的容器空间上运行。
 -您可以创建Docker Volume或使用Docker bind mounts将磁盘附加到数据库`/ var / lib / mysql'
  -如果使用卷,则每个数据库创建一个卷,并且数据是隔离的。
-如果使用绑定安装,请确保安装不同的磁盘位置;如果使用相同的位置,则第二个数据库容器数据将覆盖第一个数据库数据。

第二种情况:根据这种情况,由于“卷”标签相同,因此每次启动服务时,第二种即将出现的服务数据将替换已经运行的服务数据。

本文链接:https://www.f2er.com/3082673.html

大家都在问