DockerHub Автоматическая сборка для Arm / Arm64 - В доступе отказано - PullRequest
0 голосов
/ 23 апреля 2019

Процесс сборки, работающий на локальном ПК, вызывает ошибки при запуске на DockerHub в виде автоматической сборки.

Ссылка на ветку, где я пытаюсь использовать автоматическую сборку ARM: https://github.com/psyciknz/ParadoxIP150v2/tree/homie-and-events

Сборка AMD64 отлично работает на DockerHub.

Подписано: Как создать образ Docker на конкретной архитектуре с помощью Docker Hub?

Перейдя по указанной выше ссылке, мне удалось решить проблему с загрузкой правильного qemu (я пробовал x86_64-qemu-arm-static и qemu-arm-static), мне удалось обойти все проблемы, с которыми я столкнулся нет файлов Docker в главном каталоге исходных текстов (я использую следующую структуру):

/
  applicationcode.py
  Docker
    Dockerfile
    Dockerfile.arm32v7
    Dockerfile.arm64v8
    hooks
       build
       post_checkout
       pre_build

Теперь моя текущая проблема заключается в том, что в файле Docker он выдает:

RUN pip install paho-mqtt requests 

и в журналах сборки DockerHub я получаю:

Status: Downloaded newer image for arm32v7/python:2.7.15-jessie
---> a0873323b42b
Step 2/12 : COPY qemu-arm-static /usr/bin/
---> 49f090a8faac
Step 3/12 : RUN pip install paho-mqtt requests
---> Running in 2d6bb52d61bd
standard_init_linux.go:190: exec user process caused "permission denied"
The command '/bin/sh -c pip install paho-mqtt requests' returned a non-zero code: 1
build hook failed! (1)

Где хук сборки:

#!/bin/bash

# Get the name of the docker file (without path)
BUILD_FILE=$(echo Docker/Dockerfile.arm32v7 | cut -d '/' -f 2)

echo 'starting build'
echo ${DOCKERFILE_PATH}
echo ${BUILD_FILE}
echo ${IMAGE_NAME}
docker build \
    -f "${DOCKERFILE_PATH}" \
    -t "${IMAGE_NAME}" \
    .

Это простая команда сборки. Даже без этого я получаю ту же ошибку.

Вот post_checkout:

#!/bin/bash

BUILD_ARCH=$(echo "${DOCKERFILE_PATH}" | cut -d '.' -f 2)
echo ${BUILD_ARCH}

[ "${BUILD_ARCH}" == "Dockerfile" ] && 
    { echo 'qemu-user-static: Download not required for current arch'; exit 0; }
if [ "${BUILD_ARCH}" == "arm64v8" ]; then
    echo 'arm64'
    QEMU_USER_STATIC_ARCH=$([ "${BUILD_ARCH}" == "arm64v8" ] && echo "aarch64" || echo "${BUILD_ARCH}")
else
    QEMU_USER_STATIC_ARCH=$([ "${BUILD_ARCH}" == "arm32v7" ] && echo "${BUILD_ARCH::-4}" || echo "${BUILD_ARCH}")
    echo 'arm'
fi
QEMU_USER_STATIC_DOWNLOAD_URL="https://github.com/multiarch/qemu-user-static/releases/download"
QEMU_USER_STATIC_LATEST_TAG=$(curl -s https://api.github.com/repos/multiarch/qemu-user-static/tags | grep 'name.*v[0-9]' | head -n 1 | cut -d '"' -f 4)
curl -SL "${QEMU_USER_STATIC_DOWNLOAD_URL}/${QEMU_USER_STATIC_LATEST_TAG}/qemu-${QEMU_USER_STATIC_ARCH}-static" -o "qemu-${QEMU_USER_STATIC_ARCH}-static"
echo 'Directory (should be Docker)'
pwd
ls -la
echo 'Default uname'
uname -a

Я добавил несколько дополнительных команд, чтобы выяснить, где я нахожусь в файловой системе, и получить список файлов.

Pre_build:

#!/bin/bash

BUILD_ARCH=$(echo "${DOCKERFILE_PATH}" | cut -d '.' -f 2)

[ "${BUILD_ARCH}" == "Dockerfile" ] && 
    { echo 'qemu-user-static: Registration not required for current arch'; exit 0; }

docker run --rm --privileged multiarch/qemu-user-static:register --reset

Arm32 DockerFile.

FROM arm32v7/python:2.7.15-jessie

#copy qemu from Docker/hooks (when on DockerHub)
COPY qemu-arm-static /usr/bin/

# based on https://github.com/pfichtner/docker-mqttwarn

# install python libraries (TODO: any others?)
RUN pip install paho-mqtt requests 

# build /opt/mqttwarn
RUN mkdir -p /opt/paradox
WORKDIR /opt/paradox

# add user mqttwarn to image
RUN groupadd -r paradox && useradd -r -g paradox paradox
RUN chown -R paradox /opt/paradox

# process run as mqttwarn user
USER paradox

# conf file from host
VOLUME ["/opt/paradox/conf"]

# set conf path
ENV PARADOXINI="/opt/paradox/conf/config.ini"

# finally, copy the current code (ideally we'd copy only what we need, but it
#  is not clear what that is, yet)
COPY . /opt/paradox

# run process
CMD python IP150MQTTv2.py

Но если я запускаю тот же файл докера (с тем же файлом qemu) на моей машине с Ubuntu. sudo docker build -f Docker/Dockerfile.arm32v7 . Я получаю сборку. Так что, насколько я могу судить, процесс работает, но есть кое-что в среде докера-концентратора, на которой я застрял.

...