Por que um volume extra está sendo criado quando inicio o contêiner Postgres?

1

Eu crio um volume da seguinte forma:

>docker volume create testapp-pgdata

Eu vejo isso listado da seguinte forma:

>docker volume ls
DRIVER VOLUME NAME
local 0a47653c820b1d32df3197ed0598eb0a6e7e64f0e80c4ea0461f64c345048f66
local testapp-pgdata

Eu inicio o contêiner usando o seguinte comando:

> docker-compose -f src/main/docker/postgresql.yml up -d

O arquivo yml se parece com o seguinte:

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:

Quando o contêiner é iniciado, vejo isso no sysout:

Creating volume "docker_testapp-pgdata" with default driver

Quando eu listo os verbos novamente, vejo o seguinte:

>docker volume ls
DRIVER VOLUME NAME
local 0a47653c820b1d32df3197ed0598eb0a6e7e64f0e80c4ea0461f64c345048f66
local docker_testapp-pgdata
local testapp-pgdata

Quando eu inspeciono os dois volumes, não há muita diferença:

> docker volume inspect testapp-pgdata
[
{
"CreatedAt": "2018-08-26T09:04:34Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/testapp-pgdata/_data",
"Name": "testapp-pgdata",
"Options": {},
"Scope": "local"
}
]
> docker volume inspect docker_testapp-pgdata
[
{
"CreatedAt": "2018-08-26T09:36:32Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/docker_testapp-pgdata/_data",
"Name": "docker_testapp-pgdata",
"Options": null,
"Scope": "local"
}
]

Agora, a pergunta: por que o segundo volume (docker_testapp-pgdata) é criado como um clone próximo do volume original (testapp-pgdata) quando o contêiner é iniciado?

Estou executando Docker version 18.06.0-ce, build 0ffa825 no Windows.

    
por crowne 26.08.2018 / 13:43

1 resposta

1

Quando você emitir um docker-compose up , o Docker Compose criará por padrão um volume, rede e contêiner com o nome de projectname_servicename_number , em que projectname é o nome do diretório que o arquivo de composição do Docker existe

No seu caso, o Docker não considera seu volume existente, ele criará um novo volume. Para fazer com que considere seu volume, você deve adicionar uma chave de external: true para que o Docker ignore o criação de volume. Será assim:

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

O external: true dirá ao Docker Compose para não criar um novo volume e usar o volume com o nome fornecido como está. Observe que, se o volume não existir, ele falhará com um erro

    
por 26.08.2018 / 15:03

Tags