Ошибка проверки диска для задачи импорта / экспорта AWS
Я пытался преобразовать образ Docker в файл VMDK для создания AWS AMI с помощью AWS Import / Export. Для этого:
Я использовал это руководство для создания
.img
файл из моего DockerFile.Теперь я использую эту команду:
VBoxManage convertfromraw --format VMDK disk.img disk.vmdk
конвертировать мой.img
подать в.vmdk
файл в формате IMG не поддерживается службой AWS.
Однако, когда я запускаю сервис импорта / экспорта, он выдает мне эту ошибку:
"StatusMessage": "ClientError: Disk validation failed [Unsupported VMDK File Format]"
Есть ли что-то, что я сделал неправильно в процессе конвертации?
2 ответа
Это может быть полезно, не знаю точно, почему вы получаете проблему, но другие с этой проблемой были направлены сюда.
http://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html
Ошибка импорта файлов vmdk с помощью инструментов разработчика ec2
Я связался с сотрудниками службы поддержки AWS по поводу той же проблемы. Их ответ таков:
К сожалению, импорт образа Docker не поддерживается VMIE. Поскольку образ Docker не является полностью виртуализированной ОС, вы не сможете загрузить этот образ, даже если импорт был успешным.
Существует гораздо более простое решение с использованием пользовательских данных. Что касается кода, выполняемого внутри контейнера, то между контейнерами и виртуальными машинами нет никакой разницы. Код думает, что работает на обычной ОС. Таким образом, вместо создания контейнера Docker с помощью Dockerfile, вы можете использовать сценарий пользовательских данных, чтобы сделать то же самое в экземпляре. Например, с помощью ADD в Dockerfile он берет файлы и записывает их в контейнер. Мы можем извлечь этот файл, скажем, из S3, и скопировать его туда, куда нужно поместить экземпляр. Он пойдет в том же месте, что и в контейнере. Директивы RUN в файле Docker отобразят 1-к-1 с помощью скрипта пользовательских данных, поскольку это просто команды. Для директивы CMD мы можем просто запустить этот процесс через пользовательские данные. Тома Docker не имеют значения, так как у нас есть доступ к полному хранилищу экземпляра, поэтому вы можете игнорировать создание томов и просто записывать туда, куда нужны любые файлы. Таким образом, ваш скрипт пользовательских данных заменит Dockerfile для начальной загрузки вашего экземпляра и запуска вашего приложения. Вместо синтаксиса Dockerfile вы будете использовать синтаксис Bash. Ниже приведен пример сценария, который имитирует ваш Dockerfile.
#! /bin/bash
pip install --upgrade --user awscli
sudo aws s3 cp s3://example-bucket/hello /
sudo chmod +x /hello /hello
Вот разбивка того, что делает скрипт:
Уверен, что установлен AWS Cli
Извлекает файл "привет" из корзины S3 и записывает его в '/'
Убедитесь, что файл "привет" является исполняемым
Выполняет привет Это по сути то, что Dockerfile делает в контейнере, однако вместо извлечения из S3 он вытягивает его из местоположения Dockerfile. После добавления вашего файла в S3 вы можете легко извлечь его из сценария пользовательских данных. Запустив это, вам даже не нужно будет создавать пользовательский AMI, так как начальная загрузка выполняется на экземпляре после загрузки. Чтобы выбрать подходящую ОС, вы можете запустить QuickStart Ubuntu AMI и добавить этот скрипт пользовательских данных. Кроме того, вы можете продолжить тестирование с Docker без проблем, вам просто нужно убедиться, что файл "hello" синхронизирован между вашим местоположением Docker и корзиной S3. Для этого вы можете использовать команду S3 Sync.
Я получал сообщение об ошибке: Ошибка проверки диска [У нас нет доступа к указанному ресурсу. 403 Запрещено]
Я знал, что эта роль подходит, потому что в прошлом я загружал много изображений. Иногда я использовал формат ova, иногда vmdk, он всегда работал, пока не переставал работать.
Как упоминалось выше, полезна ошибка "Ошибка проверки диска". Сообщение "Невозможно получить доступ к ресурсу" И "403 запрещено" заставило меня искать разрешение в течение 2 дней. В конце концов, я прислушался к предупреждению и посмотрел на проверку диска, а не на разрешение. Конечно же, хотя у моего ova не было пробелов в имени файла, у vmdk внутри него был пробел в имени файла, и ресурс не мог быть найден. Убедитесь, что вы извлекли свой ova (или подтвердите с помощью tar tvfz) и убедитесь, что имя файла на диске не содержит пробелов в имени файла.