#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