почему docker выдает ошибку, когда я удаляю изображение, на которое ссылается контейнер? - PullRequest
0 голосов
/ 02 апреля 2019

Я изучаю Docker, но мне стало любопытно, какие ошибки выдает Docker.Когда я пытаюсь удалить изображение, на которое ссылается контейнер, Docker выдает ошибку, сообщающую

Сообщение об ошибке

Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container 6a2e5242c2ac is using its referenced image fce289e99eb9

Я думал, что если я удалю изображение,при повторном запуске контейнера возникнет проблема, но при повторном запуске контейнера проблем не возникнет.

Вот несколько шагов для описания моего вопроса.

docker run hello-world

контейнер будет работать нормально, и некоторые сообщения будут отображаться в терминале.

docker ps -a

будет остановленный контейнер с именем "hello-world", и онбудет иметь идентификатор

docker rmi -f hello-world

без "-f", Docker выдаст ошибку при его удалении.

docker start -i {ID of the CONTAINER}

Evenхотя мы удалили базовое изображение контейнера, контейнер работает хорошо.

введите описание изображения здесь

введите описание изображения здесь

Вот мои вопросы.

  1. Ошибка только для предупреждения изображенияиспользовался для изготовления контейнера?

  2. Если ответ «НЕТ», какая проблема может возникнуть после удаления изображения?

1 Ответ

0 голосов
/ 02 апреля 2019

Я могу только представить с высоты птичьего полета, почему это необходимо, надеюсь, другие могут уточнить.

Докер использует слои относительных различий только для чтения для построения окончательного состояния.Запуск контейнера обозначает процесс, который записывает изменения относительно изображения.Однако для того, чтобы это работало, Docker должен знать, что такое базовый образ и его содержимое.Вот почему изображение должно оставаться доступным.

Мне нравится думать о том, как работают системы контроля версий, такие как Git.Ваши локальные изменения отображаются только потому, что доступна фиксированная ссылка (локальный репозиторий).

Пример. Предположим, изображение содержит file.txt.Процесс контейнера запускается и изменяет первую строку этого файла.Это изменение не сохраняется путем изменения исходного файла, но оно записывается как diff.Когда ваш контейнерный процесс читает файл, он читает исходный файл из изображения и какие изменения были сделаны из контейнера.Если изображение недоступно, докер не может знать, каково текущее содержимое файла, потому что он знает только то, что изменилось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...