我正在学习Docker。我用-v选项运行两个MYSQL容器,它们的两个卷名相同,这两个卷中只有一个是在主机文件系统上创建的。是第二个优先于第一个,还是系统保留第一个?我没有看到任何显示卷名冲突的命令。这是我的命令
docker container run -d --name mysql_1 -e MYSQL_ALLOW_EMPTY_PASSWORD=True -v mysql_db:/var/lib/mysql mysql
docker container run -d --name mysql_2 -e MYSQL_ALLOW_EMPTY_PASSWORD=True -v mysql_db:/var/lib/mysql mysql
答案 0 :(得分:0)
我使用命令docker volume [name] inspect
检查日志,看来第二个卷将覆盖第一个卷
[
{
"CreatedAt": "2020-07-24T09:34:05Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/mysql_db78/_data",
"Name": "mysql_db78",
"Options": null,
"Scope": "local"
}
]
createdAt是我键入最后一个docker container run -v ..
命令的时间。但是奇怪的是,Docker没有通知卷名冲突
答案 1 :(得分:0)
允许将相同的卷装载到不同的容器中。一个可以读写的文件可以被另一个读写。这里没有“冲突”。
在两个docker run
命令中,您都告诉Docker将名为mysql_db
的卷安装到路径/var/lib/mysql
上。在第一个命令Docker automatically creates the named volume中,就好像您已经在运行docker volume create mysql_db
一样,因为它尚不存在。然后第二个docker run
命令重新使用该卷。
(操作上,不能有多个MySQL服务器在同一个数据存储上运行,因此应该看到一个启动时错误,指向mysql_2
容器中的锁定文件。在设计级别,请尝试为避免文件共享,而更喜欢跨容器API调用,因为协调文件共享可能很棘手,并且无法很好地扩展到Kubernetes等更高级的环境。)