创建具有相同第二个卷名称的两个容器

时间:2020-07-24 09:28:10

标签: linux docker dockerfile docker-machine

我正在学习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

2 个答案:

答案 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等更高级的环境。)