Я пытаюсь настроить автоматизацию c сборки и развертывания на Raspberry PI с использованием Gitlab CI и контейнера реестра. Вот мой Dockerfile (это. net основное приложение):
FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim-arm32v7 AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster-arm32v7 AS build
WORKDIR /src
COPY ["ConsoleApp/ConsoleApp.csproj", "ConsoleApp/"]
RUN dotnet restore "ConsoleApp/ConsoleApp.csproj"
COPY . .
WORKDIR "/src/ConsoleApp"
RUN dotnet build "ConsoleApp.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "ConsoleApp.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ConsoleApp.dll"]
.gitlab-ci.yml
image: docker:19.03.1
services:
- docker:19.03.1-dind
stages:
- build
- test
- release
- deploy
variables:
DOCKER_HOST: tcp://docker:2376
DOCKER_TLS_CERTDIR: "/certs"
CONTAINER_CONSOLEAPP_ARM32: $CI_REGISTRY_IMAGE:consoleapparm32
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
build_consoleapp_arm32:
stage: build
script:
- docker build -f ./ConsoleApp/DockerfileARM -t $CONTAINER_CONSOLEAPP_ARM32 .
- docker push $CONTAINER_CONSOLEAPP_ARM32
Сборка этого Dockerfile работает отлично, если я запускаю его непосредственно на Малина. Если я пытаюсь создать точно такой же файл, используя точно такую же команду на Gitlab CI, я получаю некоторые странные ошибки, такие как:
standard_init_ linux. go: 211: exe c user процесс вызвал "нет такого файла или каталога"
Может ли быть проблема с несовместимой архитектурой? Есть ли обходные пути для этого?