Рейтинг:0

Перенос док-контейнера с сервера на базе Linux на AWS

флаг in

Я пытаюсь переместить контейнер, работающий на сервере под управлением Linux, в AWS. Я делаю фиксацию-сохранение-загрузку.

После выполнения фиксации-сохранения-загрузки создается образ докера. Затем я запустил этот образ докера с помощью команды

докер запустить <image_name>

Но я получаю следующую ошибку

Платформа запрошенного образа (linux/amd64) не соответствует обнаружена хост-платформа (linux/arm64/v8), но конкретная платформа не указана. просил

standard_init_linux.go:228: пользовательский процесс exec вызвал: формат exec ошибка

Я попытался запустить образ докера, используя

docker run --platform linux/amd64 <image_name>

Даже это не решило проблему. Получил ту же ошибку

Рейтинг:1
флаг ca

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

другими словами, он не будет работать с процедурой фиксации/сохранения/загрузки.

Сам образ обычно нужно строить(docker buildx build --platform linux/arm64/v8,linux/amd64,...) на основе Dockerfile для каждой целевой платформы.

Если у вас нет Dockerfile (плохие привычки), вы можете попробовать перепроектировать Dockerfile из образа (до определенного уровня), используя история докера и/или https://github.com/mrhavens/Dedockify

Хотя buildx — правильный способ сделать это, вы можете — для простоты — просто унаследованную сборку (сборка докера) изображение прямо на вашем компьютере с ARM aws, если вы просто хотите запустить его один раз и быстро

(по-прежнему требуется файл Dockerfile — невозможно преобразовать образ для другой платформы)

sgohl avatar
флаг ca
Я бы не упоминал об этом в ответе, но если вы случайно выбрали платформу ARM, просто запустите машину x86_64 (любой тип экземпляра, отличный от *)
The Beast avatar
флаг in
О.. понял. Спасибо
The Beast avatar
флаг in
Есть ли способ создать мультиархитектурный образ Docker из контейнера?
Рейтинг:0
флаг cn

Если вы установите Кему на машине AWS Arm вы потенциально можете запустить образ x86_64, но это будет на эмулированном ЦП, который будет иметь большие накладные расходы на производительность.

Предполагая, что хост-компьютер на базе Debian/Ubuntu

sudo apt-get install qemu binfmt-support qemu-user-static 
docker run --rm --привилегированный мультиархив/qemu-user-static --reset -p yes
docker run --platform linux/amd64 <image_name>

Первая команда устанавливает уровень эмуляции, вторая сообщает ядру, где найти эмуляторы для запуска контейнера, вам нужно будет выполнять второй шаг каждый раз при перезагрузке хост-компьютера.

Как указано как здесь, так и по вашему другому вопросу, правильный Что нужно сделать, так это использовать Dockerfile для создания ваших контейнеров, так как таким образом у вас будет повторяемый способ сборки вашего контейнера для любой требуемой архитектуры (вы также можете использовать шаги, которые я упомянул выше, для создания образа для Arm64 на вашем компьютере X86_64). как описано здесь)

The Beast avatar
флаг in
Понял, спасибо
флаг cn
@TheBeast https://serverfault.com/help/someone-answers

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.