1

Я создаю том следующим образом:

> том докера создать testapp-pgdata

Я вижу это в следующем списке:

> Объем докера 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:

Когда контейнер запускается, я вижу это в sysout:

Создание тома "docker_testapp-pgdata" с драйвером по умолчанию

Когда я снова перечисляю полевок, я вижу следующее:

> Объем докера LS
ИМЯ ДРАЙВЕРА ОБЪЕМ
местный 0a47653c820b1d32df3197ed0598eb0a6e7e64f0e80c4ea0461f64c345048f66
локальный docker_testapp-pgdata
местный testapp-pgdata

Когда я проверяю два тома, нет большой разницы:

> Докер том проверяет testapp-pgdata
[
{
"CreatedAt": "2018-08-26T09: 04: 34Z",
"Водитель": "местный",
"Ярлыки": {},
"Точка монтирования": «/var/lib/docker/volume /testapp-pgdata /_data»,
"Имя": «testapp-pgdata»,
"Опции": {},
"Область применения": "местный"
}
]
> том докера проверяет docker_testapp-pgdata
[
{
"CreatedAt": "2018-08-26T09: 36: 32Z",
"Водитель": "местный",
"Метки": ноль,
"Точка монтирования": «/var/lib/docker/volume /docker_testapp-pgdata /_data»,
"Имя": "docker_testapp-pgdata",
"Опции": ноль,
"Область применения": "местный"
}
]

Теперь вопрос: почему второй том (docker_testapp-pgdata) создается как ближайший клон исходного тома (testapp-pgdata) при запуске контейнера?

Я использую Docker version 18.06.0-ce, build 0ffa825 для Windows.

1 ответ1

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 не создавать новый том и использовать том с указанным именем как есть. Обратите внимание, что если том не существует, он потерпит неудачу с ошибкой

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .