Докер в macOS работает под управлением arm64 на amd64 - PullRequest
0 голосов
/ 30 августа 2018

При тестировании определенной версии проекта хранилище на macOS (version 10.13.6), используя Docker 18.06.10-ce-mac73, я создал этот Dockerfile:

FROM ubuntu
RUN apt-get update && apt-get install -y --no-install-recommends -q curl build-essential ca-certificates git net-tools netcat unzip jq
WORKDIR /vault
RUN mkdir -p /vault/bin && \
    cd /vault/bin && \
    curl -o vault.zip -sL https://releases.hashicorp.com/vault/0.9.0/vault_0.9.0_linux_arm64.zip && unzip vault.zip
ENV PATH="/vault/bin:${PATH}"
ENTRYPOINT /bin/bash

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

root@d2abe7afe964:/vault/bin# vault --version
Unknown host QEMU_IFLA type: 40
Unknown host QEMU_IFLA type: 41
Unknown host QEMU_IFLA type: 40
Unknown host QEMU_IFLA type: 41
Unknown QEMU_IFLA_INFO_KIND ipip
Unknown host QEMU_IFLA type: 40
Unknown host QEMU_IFLA type: 41
Unknown QEMU_IFLA_INFO_KIND ip6tnl
Unknown host QEMU_IFLA type: 40
Unknown host QEMU_IFLA type: 41
Vault v0.9.0 ('bdac1854478538052ba5b7ec9a9ec688d35a3335')

Коллега, использующий Linux (Ubuntu), не смог выполнить команду vault, ошибка, которую он получал:

exec error command failed

После более подробной проверки проблема заключалась в том, что Dockerfile использовал vault_0.9.0_linux_arm64.zip вместо vault_0.9.0_linux_amd64.zip. По ошибке бинарный файл для arm64 использовался вместо требуемого amd64, нас удивило то, что в среде macOS работало.

Поэтому хотелось бы узнать более подробно, почему это происходит, и есть ли способ запустить контейнеры в «строгом» или более «похожем» Linux », когда это необходимо?

1 Ответ

0 голосов
/ 23 октября 2018

Поскольку Docker на MacOS (ваша машина) поставляется с виртуальной машиной Linux (контейнеру Docker требуются некоторые функции ядра Linux, поэтому он не может работать только на MacOS). Эта виртуальная машина Linux была настроена с QEMU и binfmt_misc, поэтому она может запускать контейнер arm64 . Между тем, на вашем другом компьютере Docker работает на своем родном Linux (не через VM), а его Linux недостаточно настроен для запуска контейнера arm64 .

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