为什么启动 Postgres 容器时会创建额外的卷?

为什么启动 Postgres 容器时会创建额外的卷?

我创建了一个卷,如下所示:

>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_numberprojectname 是 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 不要创建新卷,而是按原样使用具有提供名称的卷。请注意,如果卷不存在,它将失败并显示错误

相关内容