I’m a DevOps Engineer trying to build a Docker image using this Dockerfile on an ARM64 architecture.
This Dockerfile worked fine on Intel architecture, but when run on ARM64 it gives this error:
Warning: Failed to find package 'ndk;21.4.7075529'
#21 11.89 [=== ] 10% Computing updates...
#21 ERROR: process "/dev/.buildkit_qemu_emulator /bin/sh -c yes | ./sdkmanager "ndk;${NDK_VERSION_1}" "ndk;${NDK_VERSION_2}" "ndk;${NDK_VERSION_3}" --sdk_root=/opt/cmdline-tools/latest/bin" did not complete successfully: exit code: 1
------
> [18/23] RUN yes | ./sdkmanager "ndk;21.4.7075529" "ndk;23.1.7779620" "ndk;24.0.8215888" --sdk_root=/opt/cmdline-tools/latest/bin:
#21 11.89 [=== ] 10% Computing updates...
#21 11.89 [=== ] 10% Computing updates...
------
Dockerfile:147
--------------------
145 | RUN yes | ./sdkmanager "platforms;${SKD_PLATFORMS_1}" "platforms;${SKD_PLATFORMS_2}" "platforms;${SKD_PLATFORMS_3}" "platforms;${SKD_PLATFORMS_4}" --sdk_root=/opt/cmdline-tools/latest/bin
146 |
147 | >>> RUN yes | ./sdkmanager "ndk;${NDK_VERSION_1}" "ndk;${NDK_VERSION_2}" "ndk;${NDK_VERSION_3}" --sdk_root=/opt/cmdline-tools/latest/bin
148 |
149 | RUN yes | ./sdkmanager "cmake;${CMAKE_VERSION_1}" "cmake;${CMAKE_VERSION_2}" --sdk_root=/opt/cmdline-tools/latest/bin
--------------------
error: failed to solve: process "/dev/.buildkit_qemu_emulator /bin/sh -c yes | ./sdkmanager "ndk;${NDK_VERSION_1}" "ndk;${NDK_VERSION_2}" "ndk;${NDK_VERSION_3}" --sdk_root=/opt/cmdline-tools/latest/bin" did not complete successfully: exit code: 1
Error: Process completed with exit code 1.
I figured that if I use
ARG NDK_VERSION_1=23.1.7779620
ARG NDK_VERSION_2=24.0.8215888
ARG NDK_VERSION_3=25.0.8775105
It would work. But I searched and found that NDK 21+ do support ARM64. So I’m not sure why it’s giving this error.
Does anyone have an idea?
This is a part of my Dockerfile
FROM --platform=linux/arm64 ghcr.io/actions/actions-runner:latest
# Set environment variables
ENV HOME=/home/runner
ENV ANDROID_HOME="/opt/cmdline-tools/latest/bin/"
ENV RUBY_VERSION=2.7.8
ENV RUBY_VERSION_UPDATE=3.2.2
ENV LANGUAGE=en_US.UTF-8
ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
# # Run as root user
USER root
WORKDIR /root/
# Set non-interactive frontend for apt-get
ARG DEBIAN_FRONTEND=noninteractive
# Define versions for various tools and packages
ARG WM_VERSION=v2021.03.01.00
ARG NODE_VERSION=16.0.0
ARG NPM_VERSION=7.10.0
ARG GRADLE_VERSION=gradle-7.4.1
ARG ANDROID_SDK_VERSION=commandlinetools-linux-7583922_latest
ARG SDK_BUILD_TOOLS_VERSION_1=30.0.3
ARG SDK_BUILD_TOOLS_VERSION_2=31.0.0
ARG SDK_BUILD_TOOLS_VERSION_3=33.0.0
ARG SDK_BUILD_TOOLS_VERSION_4=33.0.1
ARG SDK_BUILD_TOOLS_VERSION_5=34.0.0
ARG SKD_PLATFORMS_1=android-30
ARG SKD_PLATFORMS_2=android-31
ARG SKD_PLATFORMS_3=android-33
ARG SKD_PLATFORMS_4=android-34
# NDK Versions
ARG NDK_VERSION_1=21.4.7075529
ARG NDK_VERSION_2=23.1.7779620
ARG NDK_VERSION_3=24.0.8215888
ARG CMAKE_VERSION_1=3.18.1
ARG CMAKE_VERSION_2=3.22.1
ARG JAVA_VERSION=openjdk-17-jdk
# Install necessary packages
RUN apt-get update && apt-get install -y --fix-missing
wget
npm
ruby-full
rbenv
git
jq
python3
python3-pip
imagemagick
locales
libyaml-dev
&& locale-gen en_US.UTF-8
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# Compile and install curl from source
# RUN wget https://curl.se/download/curl-8.4.0.tar.gz
# && tar -xvf curl-8.4.0.tar.gz
# && cd curl-8.4.0
# && ./configure --with-openssl
# && make
# && make install
# && cd ..
# && rm -rf curl-8.4.0 curl-8.4.0.tar.gz
# && ln -sf /usr/local/bin/curl /usr/bin/curl
# && ldconfig
# Using package manager's curl which gets the latest supported curl for arm64. curl 8.4.0 is not supported.
RUN apt-get install curl
# Download and install kubectl
&& curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/arm64/kubectl"
&& chmod +x ./kubectl
&& mv ./kubectl /usr/local/bin/kubectl
# Install and setup Gradle
&& mkdir /opt/gradle
&& cd /opt/gradle
&& wget https://services.gradle.org/distributions/$GRADLE_VERSION-all.zip
&& unzip -d /opt/gradle $GRADLE_VERSION-all.zip
&& rm /opt/gradle/$GRADLE_VERSION-all.zip
&& ln -s /opt/gradle/${GRADLE_VERSION}/bin/gradle /usr/local/bin/gradle
# Setup Ruby environment using rbenv
&& git clone https://github.com/rbenv/rbenv.git ~/.rbenv
&& echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
&& echo 'eval "$(rbenv init -)"' >> ~/.bashrc
&& echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
&& echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
&& git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
&& rbenv install $RUBY_VERSION && rbenv global $RUBY_VERSION
&& rbenv install $RUBY_VERSION_UPDATE
&& ruby --version
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# Install Bundler
RUN gem install bundler:2.4.22 --no-document
# Install awscli
RUN pip install awscli
# Install Node.js and npm
RUN npm install -g npmrc &&
npm i -g penv &&
npm install eslint -g &&
npm install yarn -g
# Install Android SDK
WORKDIR /opt
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y ${JAVA_VERSION}
&& wget https://dl.google.com/android/repository/$ANDROID_SDK_VERSION.zip
&& export PATH=${PATH}:~/android-sdk-linux/toolsi
&& export PATH=${PATH}:~/android-sdk-linux/platform-tools
&& unzip ${ANDROID_SDK_VERSION}.zip && rm ${ANDROID_SDK_VERSION}.zip
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# Configure Android SDK and platforms
# Set the working directory once
WORKDIR /opt/cmdline-tools
# Move files to 'latest' directory
RUN mkdir latest && mv NOTICE.txt bin lib source.properties latest
# Set the working directory to where sdkmanager is located
WORKDIR /opt/cmdline-tools/latest/bin
# Now run sdkmanager commands without needing to cd each time
RUN yes | ./sdkmanager --licenses --sdk_root=/opt/cmdline-tools/latest/bin
RUN ./sdkmanager --list
RUN yes | ./sdkmanager "tools" "platform-tools" --sdk_root=/opt/cmdline-tools/latest/bin || echo "Emulator not available, continuing..."
RUN yes | ./sdkmanager "build-tools;${SDK_BUILD_TOOLS_VERSION_1}" "build-tools;${SDK_BUILD_TOOLS_VERSION_2}" "build-tools;${SDK_BUILD_TOOLS_VERSION_3}" "build-tools;${SDK_BUILD_TOOLS_VERSION_4}" "build-tools;${SDK_BUILD_TOOLS_VERSION_5}" --sdk_root=/opt/cmdline-tools/latest/bin || echo "Emulator not available, continuing..."
RUN yes | ./sdkmanager "platforms;${SKD_PLATFORMS_1}" "platforms;${SKD_PLATFORMS_2}" "platforms;${SKD_PLATFORMS_3}" "platforms;${SKD_PLATFORMS_4}" --sdk_root=/opt/cmdline-tools/latest/bin
RUN yes | ./sdkmanager "ndk;${NDK_VERSION_1}" "ndk;${NDK_VERSION_2}" "ndk;${NDK_VERSION_3}" --sdk_root=/opt/cmdline-tools/latest/bin
RUN yes | ./sdkmanager "cmake;${CMAKE_VERSION_1}" "cmake;${CMAKE_VERSION_2}" --sdk_root=/opt/cmdline-tools/latest/bin
RUN chmod 777 .
I tried changing the NDK versions to a newer one and it worked, but I’d prefer to use the old version.
Rania is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.