我创建了一个卷,如下所示:
>docker 卷创建 testapp-pgdata
我看到其列表如下:
>docker volume ls
驱动程序卷名称
本地0a47653c820b1d32df3197ed0598eb0a6e7e64f0e80c4ea0461f64c345048f66
本地testapp-pgdata
我使用以下命令启动容器:
>docker-compose-f src/main/docker/postgresql.yml up-d
yml 文件如下所示:
version: '2'
services:
testapp-postgresql:
image: postgres:10.4
volumes:
- testapp-pgdata:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=testapp
- POSTGRES_PASSWORD=
ports:
- 5432:5432
volumes:
testapp-pgdata:
当容器启动时,我在系统输出中看到以下内容:
使用默认驱动程序创建卷“docker_testapp-pgdata”
当我再次列出田鼠时,我看到了以下内容:
>docker volume ls
驱动程序卷名称
本地 0a47653c820b1d32df3197ed0598eb0a6e7e64f0e80c4ea0461f64c345048f66
本地 docker_testapp-pgdata
本地 testapp-pgdata
当我检查这两卷时,没有太大的区别:
> docker volume inspect testapp-pgdata
[
{
“CreatedAt”:“2018-08-26T09:04:34Z”,
“驱动程序”:“local”,
“标签”:{},
“挂载点”:“/var/lib/docker/volumes/testapp-pgdata/_data”,
“名称”:“testapp-pgdata”,
“选项”:{},
“范围”:“local”
}
]
> docker volume inspect docker_testapp-pgdata
[
{
“CreatedAt”:“2018-08-26T09:36:32Z”,
“驱动程序”:“local”,
“标签”:null,
“挂载点”:“/var/lib/docker/volumes/docker_testapp-pgdata/_data”,
“名称”:“docker_testapp-pgdata”,
“选项”:null,
“范围”:“local”
}
]
现在的问题是:为什么在启动容器时,第二个卷(docker_testapp-pgdata)会创建为原始卷(testapp-pgdata)的近似克隆?
Docker version 18.06.0-ce, build 0ffa825
我在 Windows 上运行。
答案1
当你发出一个 时docker-compose up
,Docker Compose 将默认创建一个名为的卷、网络和容器,其中projectname_servicename_number
projectname 是 Docker Compose 文件所在的目录的名称
在你的情况下,Docker 不会考虑你现有的卷,它将创建一个新卷。要让它考虑你的卷,你必须添加一个键external: true
让 Docker 忽略卷的创建。它将如下所示:
version: '2'
services:
testapp-postgresql:
image: postgres:10.4
volumes:
- testapp-pgdata:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=testapp
- POSTGRES_PASSWORD=
ports:
- 5432:5432
volumes:
testapp-pgdata:
external: true
这external: true
将告诉 Docker Compose 不要创建新卷,而是按原样使用具有提供名称的卷。请注意,如果卷不存在,它将失败并显示错误