Сбой команды Docker на ARM

#git #docker #arm

#git #docker #arm

Вопрос:

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

 # docker build -t shantanuo/redistimeseries .
Sending build context to Docker daemon  32.75MB
Step 1/19 : ARG REDIS_VER=6.0.9
Step 2/19 : ARG OSNICK=bionic
Step 3/19 : ARG ARCH=arm64v8
Step 4/19 : FROM redisfab/redis:${REDIS_VER}-${ARCH}-${OSNICK} AS builder
 ---> 1b5e0f2c1672
Step 5/19 : ARG REDIS_VER
 ---> Using cache
 ---> f9d3227c2bb0
Step 6/19 : ADD ./ /build
 ---> Using cache
 ---> 371c631e8952
Step 7/19 : WORKDIR /build
 ---> Using cache
 ---> eeadd76e1639
Step 8/19 : RUN ./deps/readies/bin/getpy3
 ---> Running in bea45f18f407
/bin/sh: 1: ./deps/readies/bin/getpy3: not found
The command '/bin/sh -c ./deps/readies/bin/getpy3' returned a non-zero code: 127
 

Я изменил переменные ARCH и OSNICK на шаге 2 и 3

Я получил файл dockerfile из этого местоположения:

https://hub.docker.com/r/redislabs/redistimeseries/dockerfile

Есть ли какой-нибудь простой способ создания образов для ARM?

Комментарии:

1. Вы выполняете docker build команду по arm64v8 архитектуре?

2. Я использую «arm64» в соответствии с командой «dpkg —print-architecture». Не уверен, что это v8 🙂

Ответ №1:

Вы рекурсивно клонировали репозиторий?
Похоже, что bin / getpy3 фактически включен в deps / readies как подмодуль git (см. Здесь ). Таким образом, вам может потребоваться обновить подмодули. Возможно, вы захотите попытаться инициализировать подмодуль и повторить сборку 🙂

 git submodule update --init --recursive
 

Комментарии:

1. Это сработало. Но не могли бы вы объяснить немного больше о том, как команда submodule помогла в этом случае?

2. Клонированный репозиторий RedisTimeSeries использует код из других репозиториев. Эти модули не копируются, а связаны как подмодули git; таким образом, их код хранится не в RedisTimeSeries, а в их репозиториях «readies» . Таким образом, это разделение увеличивает возможность повторного использования кода, но требует, чтобы клиент git извлекал дополнительные репозитории. Чтобы клонировать репозиторий и подмодули одновременно, используйте --recursive флаг, как указано в Readme RedisTimeSeries: git clone --recursive https://github.com/RedisTimeSeries/RedisTimeSeries.git

Ответ №2:

Вы клонировали https://github.com/RedisTimeSeries/RedisTimeSeries в каталог, в котором находится ваш dockerfile? Шаг 6 копирует файл getpy3 (и другие) в образ, а шаг 8 (сбой) пытается его запустить.

Сторона хоста, вы что-то упускаете $PWD/deps/readies/bin/getpy3 .

Похоже, что в их github также есть файл dockerfile со вкусом arm: https://github.com/RedisTimeSeries/RedisTimeSeries/blob/master/Dockerfile.arm