Где Docker сохраняет остановленные контейнеры сгенерированные файлы? - PullRequest
0 голосов
/ 27 января 2019

Я создал контейнер без -v, сохранил текстовый файл на нем, закрыл контейнер, и когда он был открыт снова, файл все еще был там. Вопрос в том, как? Где Docker хранит этот файл на хост-компьютере?

Шаги для воспроизведения:

docker run -dti --name alpine alpine sh
docker exec alpine sh -c 'echo "Hello World!!!" > hello.txt'
docker exec alpine sh -c 'ls'
docker stop alpine
docker start -ai alpine
ls

1 Ответ

0 голосов
/ 27 января 2019

Когда вы создаете контейнер без флага --read-only, в верхней части изображения создается доступный для записи слой файловой системы (в нашем случае это alpine), так что файловая система контейнера доступна для записи.Это будет существовать до тех пор, пока вы не удалите контейнер.

Расположение в хост-системе зависит от корня данных для Docker (по умолчанию: /var/lib/docker) и используемого драйвера хранилища (вероятно, overlay2).Вы можете найти драйвер хранилища, используемый для вашего контейнера и каталогов данных, в свойстве GraphDriver.

docker container inspect --format '{{ .GraphDriver }}' alpine

"GraphDriver": {
    "Data": {
        "LowerDir": "/var/lib/docker/overlay2/d71e8f30d831f1c72e883e8de3c7560b2a69751f942fe8d5e24b740699872953-init/diff:/var/lib/docker/overlay2/31f665ee64e368e98d39a709dd8662bcf92726be0c992ccad07553e277fe754f/diff:/var/lib/docker/overlay2/a19268faed5bf38f3ad574274c2062bc29fad9406938b63e50451eeba440b30b/diff:/var/lib/docker/overlay2/52b4b93b90556b85eb8b8680e037b9ba5eaaedaf91a197b5270ab25d85cc43c1/diff:/var/lib/docker/overlay2/27cbda99661de508ba2fd6aefe3b5f98a3ef75966742f6566b7313065f713da0/diff:/var/lib/docker/overlay2/8f5c1f89ef130b85016f114dc5e7ccc410cc2a0def823dc65bf9dad15f76eb47/diff:/var/lib/docker/overlay2/483646cdc089e9828767c8ce6895da362a56ea7fd35881f70aee996d71dbf70a/diff:/var/lib/docker/overlay2/ebbdc64049110d1710755176a2fb061759e25c52b3f90da65e6ae2fbfd7dc4dc/diff:/var/lib/docker/overlay2/756e3bb714cce5892ce43d59d11492a7b027a0fe37abae2d5770cebe59a70bc3/diff:/var/lib/docker/overlay2/362674379f2d583a5572c1797aed2ff03eefa786a509e04913cfb94a16a774dd/diff",
        "MergedDir": "/var/lib/docker/overlay2/d71e8f30d831f1c72e883e8de3c7560b2a69751f942fe8d5e24b740699872953/merged",
        "UpperDir": "/var/lib/docker/overlay2/d71e8f30d831f1c72e883e8de3c7560b2a69751f942fe8d5e24b740699872953/diff",
        "WorkDir": "/var/lib/docker/overlay2/d71e8f30d831f1c72e883e8de3c7560b2a69751f942fe8d5e24b740699872953/work"
    },
    "Name": "overlay2"
}

UpperDir будет содержать только внесенные вами изменения, включая hello.txtфайл в вашем примере.Вы можете сделать что-то вроде этого, чтобы перейти к нему.

cd $(docker container inspect --format '{{  .GraphDriver.Data.UpperDir }}' alpine)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...