Docker 为什么数据库存储在所有容器之间共享?

Docker 为什么数据库存储在所有容器之间共享?,docker,mariadb,Docker,Mariadb,我在Mac上遇到了一些关于我为MariaDB创建的Docker容器的奇怪行为。每次使用如下命令创建MariaDB容器时都会出现问题: docker run --rm --name db1 --publish 3307:3306 --mount type=volume,source=dbvol,target=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=test mariadb 我看到两件奇怪的事: -首先,我不需要提供任何用户或密码来登录运行在3307上

我在Mac上遇到了一些关于我为MariaDB创建的Docker容器的奇怪行为。每次使用如下命令创建MariaDB容器时都会出现问题:

 docker run --rm --name db1 --publish 3307:3306   --mount type=volume,source=dbvol,target=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=test  mariadb 
我看到两件奇怪的事:
-首先,我不需要提供任何用户或密码来登录运行在3307上的服务器。我可以用“mysql-p3307”以root用户身份轻松登录
-其次,尽管对于我创建的每个新容器,例如db1、db2、db3等,我使用
docker volume create dbvol[dbvol2、dbvol3等]
创建了一个新卷,但数据库存储似乎是为所有容器共享的。因此,在db2中,我可以看到我在db1中添加的所有表和数据,反之亦然

有人能解释一下吗?我很困惑。这是一个bug还是关于容器卷有一些我不知道的地方

附言


刚刚发现mysql客户端的自制版本不尊重p(端口)标志。它实际上打开了我的本地主机数据库。我以为它在使用容器数据库

您的所有容器似乎都在使用一个名为dbdata的卷运行:尽管您创建了
dbvol{1,2,3}
,但必须在装载的
源文件中指定它-每个实例使用不同的卷:

docker run--rm--name db1--publish 3307:3306--mount type=volume,source=dbvol1,target=/var/lib/mysql-e mysql\u ROOT\u PASSWORD=test
docker run--rm--name db3--publish 3308:3306--mount type=volume,source=dbvol2,target=/var/lib/mysql-e mysql\u ROOT\u PASSWORD=test
docker run--rm--name db2--publish 3309:3306--mount type=volume,source=dbvol3,target=/var/lib/mysql-e mysql\u ROOT\u PASSWORD=test
如果源是不存在的卷的名称,则会自动为您创建该卷。你可以阅读更多关于坐骑的信息


关于登录的用户/密码:您是否在启动容器后立即这样做?因为当容器第一次启动时,它运行一个初始化过程,然后重新启动服务器,那么所有权限都应该是正常的。

刚刚编辑了文章。将dbdata更改为dbvol。我所说的数据量实际上没有什么区别。它似乎一直在使用相同的存储。您是否使用不同的卷源运行每个容器?我编辑了答案,使它更清晰是的,我做了。不过Docker似乎使用了一个通用的存储空间来存储所有这些内容。刚刚更新了帖子。似乎是我的主机数据库打开了。这不是docker数据库。哦,那是另一个问题。您可以使用
docker exec-ti db1 mysql--password在容器内运行
mysql