У меня есть изображение Docker, которое я построил:
» docker images --no-trunc | grep discoball/nginx
discoball/nginx latest 623444f1777c 21 hours ago 126 MB
Я хотел бы перенести это на удаленный сервер; docker save
docker load
- это команды, способные сериализовать и десериализовать изображение в / из файла, что должно быть именно тем, что мне нужно. Однако я не могу заставить их работать.
Я сохраняю изображение:
» docker save discoball/nginx > nginx-latest.tar.gz
Затем попытайтесь восстановить его на удаленном компьютере:
» cat nginx-latest.tar.gz | ssh "$IP" docker load
Эта команда выполняется успешно. Тем не менее, docker images
на пульте дистанционного управления указывают, что изображение не было сделано; скорее то, что кажется старой версией, все еще присутствует:
» ssh "$IP" docker images --no-trunc | grep discoball/nginx
discoball/nginx latest 2678dc27dd46 21 hours ago 126 MB
Обратите внимание, что идентификатор изображения отличается; Я предполагаю, что это старая версия моего изображения. Поиск самого идентификатора изображения также не дает результатов на сервере:
» ssh "$IP" docker images --all | grep 623444
(last command returned 1.)
»
Что я делаю неправильно?
Так что теперь я копаюсь в сгенерированном файле .tar.gz
; файл repositories
в нем, кажется, указывает, что удаленная машина имеет право:
» tar -xf nginx-latest.tar.gz -O repositories
{"discoball/nginx":{"latest":"2678dc27dd46469bc8692c2e5ad71b57ae573b1444531fcd1f76798638f84f5c"}}
Это номер, который я вижу на пульте. Но почему, черт возьми, docker save
пишут , что из, а не 623444f1777c
(Являются ли идентификаторы Docker-изображений не просто криптографическими хешами изображения и / или слоя?) Если пульт имеет один и тот же образ, почему у него есть другое изображение ID? (Я не знаю, как это проверить на данный момент, потому что до этого момента я бы сказал, что "то же изображение" было "идентичным изображением"…)