Образ Docker для Windows "Уже существует" вообще не существует
Я пытаюсь получить изображение, которое также должно вытягивать изображение aspnet:4.7. Однако докер продолжает говорить мне изображение "Уже существует", но это не так. Есть ли способ сказать Docker для Windows, чтобы вытащить необходимые образы в любом случае?
PS C:\WINDOWS\system32> docker pull -a [hidden]/mycode
dev: Pulling from [hidden]/mycode
3889bb8d808b: Already exists
e29afd68a947: Already exists
36f010181129: Already exists
94c1c860b007: Already exists
d8096eabbf13: Already exists
67025ded22a8: Already exists
dbe75d79f130: Already exists
84d3d4630614: Already exists
301ba58699fa: Already exists
5e9f3c14f629: Already exists
90fd39402ca5: Already exists
4791db5edc55: Pull complete
1da86da74a58: Pull complete
3acc18896b8f: Pull complete
Digest: sha256:dc7e28154e63d5c22a210c314b4a80dcdba7baeea0ebf853445853680276293d
prod: Pulling from [hidden]/mycode
3889bb8d808b: Already exists
e29afd68a947: Already exists
36f010181129: Already exists
94c1c860b007: Already exists
d8096eabbf13: Already exists
67025ded22a8: Already exists
dbe75d79f130: Already exists
84d3d4630614: Already exists
301ba58699fa: Already exists
5e9f3c14f629: Already exists
a1fa39b61ce3: Already exists
98fa6868a880: Pull complete
10db2dd5f47b: Pull complete
5c881ba7245b: Pull complete
Digest: sha256:8b0464fe849148f4fb3c8e165cc7539823d974171bdb596bed48dd91bd9da20d
Status: Downloaded newer image for brunofvalli/xehub
PS C:\WINDOWS\system32> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[hidden]/mycode dev 6e8a0b8dd5f9 24 hours ago 11.8GB
[hidden]/mycode prod 98a5df79a3ce 24 hours ago 11.8GB
PS C:\WINDOWS\system32>
Я пытался сделать
docker rmi 3889bb8d808b
Но это говорит мне, что изображение не существует.
Как удалить эти кэшированные изображения? Или как заставить Docker загрузить изображение в любом случае?
РЕДАКТИРОВАТЬ Я думаю, я должен был начать с проблемой. Microsoft/ Aspnet: 4,7 слой / изображение составляет около 4 ГБ. В настоящее время, когда я пытаюсь построить свое приложение, используя этот слой / изображение, оно терпит неудачу, я предполагаю, что оно было повреждено, поскольку работа на другой машине работает нормально. Я хочу повторно получить этот базовый образ, но выполнение docker rmi не удаляет это "кэшированное" изображение / слой из моей системы, поэтому я получаю это сообщение " Уже существует". Я хочу снова загрузить изображение 4 ГБ. Есть ли способ сделать это? Я очень близок к тому, чтобы просто переустановить Windows 10.
3 ответа
Я думаю, что вы путаете слой с изображением. Образы Docker создаются с использованием dockerfile. Каждая строка в dockerfile добавляет слой, который составляет ваше изображение. Например, взяв базовый докер-файл ниже и идентификатор слоя из вашего примера выше:
FROM busybox:latest # ----> 3889bb8d808b
MAINTAINER person # ----> e29afd68a947
RUN touch foo.txt # ----> 36f010181129
CMD ["bin/sh"] # ------> 94c1c860b007
Это создаст один образ докера с каждой строкой в файле Docker, образующей слой в образе Docker. Таким образом, первая строка будет составлять слой базового изображения busybox:latest
с идентификатором 3889bb8d808b
, Впоследствии, дополнительные слои добавляются поверх предыдущего слоя, соответствующего линии dockerfile. Это действительно помогает, особенно когда мы вносим изменения в файл Docker, измененная строка будет запускать построение изображения намного быстрее, так как слой, соответствующий этой строке, будет вытянут.
Также важно отметить, что если слой уже существует на вашем компьютере как часть какого-либо другого образа докера, он используется напрямую, без повторного извлечения одного и того же слоя каждый раз. Таким образом, в вашем случае слои, говорящие о том, что уже существует, могут быть слоями, которые были извлечены ранее в каком-то другом изображении или даже в том же изображении, где вы только что обновили файл Docker на более поздних этапах, таким образом, вызывая извлечение слоев, соответствующее только измененным линиям.
Таким образом, когда вы пытаетесь docker rmi 3889bb8d808b
Докер правильно говорит, что изображение не существует. поскольку 3889bb8d808b
Идентификатор соответствует слою, а не изображению докера.
Если вы хотите, чтобы изображение докера было свежим, используйте docker images
найти идентификатор изображения, соответствующий вашему изображению Docker, и удалить его, используя docker rmi <image-ID>
, Тогда используйте docker pull -a brunofvalli/xehub
Нет необходимости удалять этот кеш, докер уже загружает новые изображения. Изображение строится по частям, и эти части называются слоями.
Когда изображение изменяется, в основном происходит изменение некоторых слоев. Так что все в порядке, если докер говорит, что изображение уже существует. В действительности докер означает, что определенный слой уже существует и не изменился в удаленном месте.
РЕДАКТИРОВАТЬ:
Для пользователей Linux:
Если вы хотите посмотреть, где хранятся данные изображений, вы можете посетить /var/lib/docker/image/aufs
, Там вы найдете imagedb
а также layerdb
Для пользователей Windows:
/var/lib/docker
смонтирован на постоянном виртуальном диске виртуальной машины, которая находится под C:\Users\Public\Documents\Hyper-V\Virtual hard disks
, Для получения дополнительной информации обратитесь сюда. Здесь обсуждается вопрос о том, где хранятся изображения и как изменить расположение по умолчанию.
Не мог сделать эту работу. Решили переустановить Windows:(Надеюсь, эта ошибка больше не появится.