micronaut-projects / micronaut-gradle-plugin

A Gradle Plugin for Micronaut
Apache License 2.0
65 stars 43 forks source link

dockerBuildNative fails for M1 Mac #469

Open sdelamo opened 2 years ago

sdelamo commented 2 years ago

Issue description

Fails with:

Step 7/27 : RUN /usr/lib/graalvm/bin/gu install native-image
 ---> Running in 9c70de6b3c35
/lib64/ld-linux-x86-64.so.2: No such file or directory
> Task :app:dockerBuildNative
Building image using context '/Users/sdelamo/github/contactvault/app/build/docker/native-main'.
Using Dockerfile '/Users/sdelamo/github/contactvault/app/build/docker/native-main/DockerfileNative'
Using images 'app'.
Step 1/27 : FROM amazonlinux:latest AS graalvm
 ---> a1a0df532d4a
Step 2/27 : ENV LANG=en_US.UTF-8
 ---> Running in 76c383d38806
Removing intermediate container 76c383d38806
 ---> 7f3c657e9c49
Step 3/27 : RUN yum install -y gcc gcc-c++ libc6-dev zlib1g-dev curl bash zlib zlib-devel zlib-static zip tar gzip
 ---> Running in d8e4c3c137ba
Loaded plugins: ovl, priorities
No package libc6-dev available.
No package zlib1g-dev available.
Package bash-4.2.46-34.amzn2.aarch64 already installed and latest version
Package zlib-1.2.7-19.amzn2.0.1.aarch64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package curl.aarch64 0:7.79.1-1.amzn2.0.1 will be updated
---> Package curl.aarch64 0:7.79.1-2.amzn2.0.1 will be an update
--> Processing Dependency: libcurl(aarch-64) = 7.79.1-2.amzn2.0.1 for package: curl-7.79.1-2.amzn2.0.1.aarch64
---> Package gcc.aarch64 0:7.3.1-14.amzn2 will be installed
--> Processing Dependency: libgomp = 7.3.1-14.amzn2 for package: gcc-7.3.1-14.amzn2.aarch64
--> Processing Dependency: cpp = 7.3.1-14.amzn2 for package: gcc-7.3.1-14.amzn2.aarch64
--> Processing Dependency: libsanitizer >= 7.3.1-14.amzn2 for package: gcc-7.3.1-14.amzn2.aarch64
--> Processing Dependency: libitm >= 7.3.1-14.amzn2 for package: gcc-7.3.1-14.amzn2.aarch64
--> Processing Dependency: libatomic >= 7.3.1-14.amzn2 for package: gcc-7.3.1-14.amzn2.aarch64
--> Processing Dependency: glibc-devel >= 2.2.90-12 for package: gcc-7.3.1-14.amzn2.aarch64
--> Processing Dependency: binutils >= 2.24 for package: gcc-7.3.1-14.amzn2.aarch64
--> Processing Dependency: libubsan.so.0()(64bit) for package: gcc-7.3.1-14.amzn2.aarch64
--> Processing Dependency: libmpfr.so.4()(64bit) for package: gcc-7.3.1-14.amzn2.aarch64
--> Processing Dependency: libmpc.so.3()(64bit) for package: gcc-7.3.1-14.amzn2.aarch64
--> Processing Dependency: libitm.so.1()(64bit) for package: gcc-7.3.1-14.amzn2.aarch64
--> Processing Dependency: libgomp.so.1()(64bit) for package: gcc-7.3.1-14.amzn2.aarch64
--> Processing Dependency: libatomic.so.1()(64bit) for package: gcc-7.3.1-14.amzn2.aarch64
--> Processing Dependency: libasan.so.4()(64bit) for package: gcc-7.3.1-14.amzn2.aarch64
---> Package gcc-c++.aarch64 0:7.3.1-14.amzn2 will be installed
---> Package gzip.aarch64 0:1.5-10.amzn2.0.1 will be installed
---> Package tar.aarch64 2:1.26-35.amzn2 will be installed
---> Package zip.aarch64 0:3.0-11.amzn2.0.2 will be installed
---> Package zlib-devel.aarch64 0:1.2.7-19.amzn2.0.1 will be installed
--> Processing Dependency: /usr/bin/pkg-config for package: zlib-devel-1.2.7-19.amzn2.0.1.aarch64
---> Package zlib-static.aarch64 0:1.2.7-19.amzn2.0.1 will be installed
--> Running transaction check
---> Package binutils.aarch64 0:2.29.1-31.amzn2 will be installed
---> Package cpp.aarch64 0:7.3.1-14.amzn2 will be installed
---> Package glibc-devel.aarch64 0:2.26-58.amzn2 will be installed
--> Processing Dependency: glibc-headers = 2.26-58.amzn2 for package: glibc-devel-2.26-58.amzn2.aarch64
--> Processing Dependency: glibc-headers for package: glibc-devel-2.26-58.amzn2.aarch64
---> Package libatomic.aarch64 0:7.3.1-14.amzn2 will be installed
---> Package libcurl.aarch64 0:7.79.1-1.amzn2.0.1 will be updated
---> Package libcurl.aarch64 0:7.79.1-2.amzn2.0.1 will be an update
---> Package libgomp.aarch64 0:7.3.1-14.amzn2 will be installed
---> Package libitm.aarch64 0:7.3.1-14.amzn2 will be installed
---> Package libmpc.aarch64 0:1.0.1-3.amzn2.0.2 will be installed
---> Package libsanitizer.aarch64 0:7.3.1-14.amzn2 will be installed
---> Package mpfr.aarch64 0:3.1.1-4.amzn2.0.2 will be installed
---> Package pkgconfig.aarch64 1:0.27.1-4.amzn2.0.2 will be installed
--> Running transaction check
---> Package glibc-headers.aarch64 0:2.26-58.amzn2 will be installed
--> Processing Dependency: kernel-headers >= 2.2.1 for package: glibc-headers-2.26-58.amzn2.aarch64
--> Processing Dependency: kernel-headers for package: glibc-headers-2.26-58.amzn2.aarch64
--> Running transaction check
---> Package kernel-headers.aarch64 0:4.14.276-211.499.amzn2 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package            Arch        Version                    Repository      Size
================================================================================
Installing:
 gcc                aarch64     7.3.1-14.amzn2             amzn2-core      18 M
 gcc-c++            aarch64     7.3.1-14.amzn2             amzn2-core      11 M
 gzip               aarch64     1.5-10.amzn2.0.1           amzn2-core     128 k
 tar                aarch64     2:1.26-35.amzn2            amzn2-core     851 k
 zip                aarch64     3.0-11.amzn2.0.2           amzn2-core     261 k
 zlib-devel         aarch64     1.2.7-19.amzn2.0.1         amzn2-core      50 k
 zlib-static        aarch64     1.2.7-19.amzn2.0.1         amzn2-core      58 k
Updating:
 curl               aarch64     7.79.1-2.amzn2.0.1         amzn2-core     359 k
Installing for dependencies:
 binutils           aarch64     2.29.1-31.amzn2            amzn2-core     6.2 M
 cpp                aarch64     7.3.1-14.amzn2             amzn2-core     7.7 M
 glibc-devel        aarch64     2.26-58.amzn2              amzn2-core     994 k
 glibc-headers      aarch64     2.26-58.amzn2              amzn2-core     502 k
 kernel-headers     aarch64     4.14.276-211.499.amzn2     amzn2-core     1.1 M
 libatomic          aarch64     7.3.1-14.amzn2             amzn2-core      45 k
 libgomp            aarch64     7.3.1-14.amzn2             amzn2-core     205 k
 libitm             aarch64     7.3.1-14.amzn2             amzn2-core      84 k
 libmpc             aarch64     1.0.1-3.amzn2.0.2          amzn2-core      53 k
 libsanitizer       aarch64     7.3.1-14.amzn2             amzn2-core     651 k
 mpfr               aarch64     3.1.1-4.amzn2.0.2          amzn2-core     208 k
 pkgconfig          aarch64     1:0.27.1-4.amzn2.0.2       amzn2-core      54 k
Updating for dependencies:
 libcurl            aarch64     7.79.1-2.amzn2.0.1         amzn2-core     322 k

Transaction Summary
================================================================================
Install  7 Packages (+12 Dependent packages)
Upgrade  1 Package  (+ 1 Dependent package)

Total download size: 49 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
--------------------------------------------------------------------------------
Total                                               39 MB/s |  49 MB  00:01     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : mpfr-3.1.1-4.amzn2.0.2.aarch64                              1/23 
  Installing : libmpc-1.0.1-3.amzn2.0.2.aarch64                            2/23 
  Installing : cpp-7.3.1-14.amzn2.aarch64                                  3/23 
  Installing : binutils-2.29.1-31.amzn2.aarch64                            4/23 
  Installing : libitm-7.3.1-14.amzn2.aarch64                               5/23 
  Installing : 1:pkgconfig-0.27.1-4.amzn2.0.2.aarch64                      6/23 
  Installing : zlib-devel-1.2.7-19.amzn2.0.1.aarch64                       7/23 
  Installing : libatomic-7.3.1-14.amzn2.aarch64                            8/23 
  Installing : kernel-headers-4.14.276-211.499.amzn2.aarch64               9/23 
  Installing : glibc-headers-2.26-58.amzn2.aarch64                        10/23 
  Installing : glibc-devel-2.26-58.amzn2.aarch64                          11/23 
  Updating   : libcurl-7.79.1-2.amzn2.0.1.aarch64                         12/23 
  Installing : libsanitizer-7.3.1-14.amzn2.aarch64                        13/23 
  Installing : libgomp-7.3.1-14.amzn2.aarch64                             14/23 
  Installing : gcc-7.3.1-14.amzn2.aarch64                                 15/23 
  Installing : gcc-c++-7.3.1-14.amzn2.aarch64                             16/23 
  Updating   : curl-7.79.1-2.amzn2.0.1.aarch64                            17/23 
  Installing : zlib-static-1.2.7-19.amzn2.0.1.aarch64                     18/23 
  Installing : zip-3.0-11.amzn2.0.2.aarch64                               19/23 
  Installing : gzip-1.5-10.amzn2.0.1.aarch64                              20/23 
  Installing : 2:tar-1.26-35.amzn2.aarch64                                21/23 
  Cleanup    : curl-7.79.1-1.amzn2.0.1.aarch64                            22/23 
  Cleanup    : libcurl-7.79.1-1.amzn2.0.1.aarch64                         23/23 
  Verifying  : libgomp-7.3.1-14.amzn2.aarch64                              1/23 
  Verifying  : curl-7.79.1-2.amzn2.0.1.aarch64                             2/23 
  Verifying  : 2:tar-1.26-35.amzn2.aarch64                                 3/23 
  Verifying  : cpp-7.3.1-14.amzn2.aarch64                                  4/23 
  Verifying  : mpfr-3.1.1-4.amzn2.0.2.aarch64                              5/23 
  Verifying  : libsanitizer-7.3.1-14.amzn2.aarch64                         6/23 
  Verifying  : gzip-1.5-10.amzn2.0.1.aarch64                               7/23 
  Verifying  : glibc-headers-2.26-58.amzn2.aarch64                         8/23 
  Verifying  : libmpc-1.0.1-3.amzn2.0.2.aarch64                            9/23 
  Verifying  : libcurl-7.79.1-2.amzn2.0.1.aarch64                         10/23 
  Verifying  : kernel-headers-4.14.276-211.499.amzn2.aarch64              11/23 
  Verifying  : zip-3.0-11.amzn2.0.2.aarch64                               12/23 
  Verifying  : libatomic-7.3.1-14.amzn2.aarch64                           13/23 
  Verifying  : zlib-devel-1.2.7-19.amzn2.0.1.aarch64                      14/23 
  Verifying  : 1:pkgconfig-0.27.1-4.amzn2.0.2.aarch64                     15/23 
  Verifying  : libitm-7.3.1-14.amzn2.aarch64                              16/23 
  Verifying  : binutils-2.29.1-31.amzn2.aarch64                           17/23 
  Verifying  : zlib-static-1.2.7-19.amzn2.0.1.aarch64                     18/23 
  Verifying  : gcc-7.3.1-14.amzn2.aarch64                                 19/23 
  Verifying  : glibc-devel-2.26-58.amzn2.aarch64                          20/23 
  Verifying  : gcc-c++-7.3.1-14.amzn2.aarch64                             21/23 
  Verifying  : curl-7.79.1-1.amzn2.0.1.aarch64                            22/23 
  Verifying  : libcurl-7.79.1-1.amzn2.0.1.aarch64                         23/23 

Installed:
  gcc.aarch64 0:7.3.1-14.amzn2                                                  
  gcc-c++.aarch64 0:7.3.1-14.amzn2                                              
  gzip.aarch64 0:1.5-10.amzn2.0.1                                               
  tar.aarch64 2:1.26-35.amzn2                                                   
  zip.aarch64 0:3.0-11.amzn2.0.2                                                
  zlib-devel.aarch64 0:1.2.7-19.amzn2.0.1                                       
  zlib-static.aarch64 0:1.2.7-19.amzn2.0.1                                      

Dependency Installed:
  binutils.aarch64 0:2.29.1-31.amzn2                                            
  cpp.aarch64 0:7.3.1-14.amzn2                                                  
  glibc-devel.aarch64 0:2.26-58.amzn2                                           
  glibc-headers.aarch64 0:2.26-58.amzn2                                         
  kernel-headers.aarch64 0:4.14.276-211.499.amzn2                               
  libatomic.aarch64 0:7.3.1-14.amzn2                                            
  libgomp.aarch64 0:7.3.1-14.amzn2                                              
  libitm.aarch64 0:7.3.1-14.amzn2                                               
  libmpc.aarch64 0:1.0.1-3.amzn2.0.2                                            
  libsanitizer.aarch64 0:7.3.1-14.amzn2                                         
  mpfr.aarch64 0:3.1.1-4.amzn2.0.2                                              
  pkgconfig.aarch64 1:0.27.1-4.amzn2.0.2                                        

Updated:
  curl.aarch64 0:7.79.1-2.amzn2.0.1                                             

Dependency Updated:
  libcurl.aarch64 0:7.79.1-2.amzn2.0.1                                          

Complete!
Removing intermediate container d8e4c3c137ba
 ---> 89a25532d149
Step 4/27 : RUN curl -4 -L https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-22.1.0/graalvm-ce-java11-linux-amd64-22.1.0.tar.gz -o /tmp/graalvm-ce-java11-linux-amd64-22.1.0.tar.gz
 ---> Running in defaa0a9fe59
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  5  421M    5 23.9M    0     0  16.7M      0  0:00:25  0:00:01  0:00:24 27.7M
 14  421M   14 60.9M    0     0  25.0M      0  0:00:16  0:00:02  0:00:14 32.7M
 23  421M   23 97.7M    0     0  28.5M      0  0:00:14  0:00:03  0:00:11 34.1M
 31  421M   31  133M    0     0  30.2M      0  0:00:13  0:00:04  0:00:09 34.6M
 36  421M   36  156M    0     0  28.4M      0  0:00:14  0:00:05  0:00:09 31.7M
 41  421M   41  175M    0     0  27.2M      0  0:00:15  0:00:06  0:00:09 30.2M
 44  421M   44  188M    0     0  25.2M      0  0:00:16  0:00:07  0:00:09 25.3M
 47  421M   47  202M    0     0  24.0M      0  0:00:17  0:00:08  0:00:09 20.9M
 51  421M   51  216M    0     0  22.7M      0  0:00:18  0:00:09  0:00:09 16.1M
 54  421M   54  229M    0     0  21.9M      0  0:00:19  0:00:10  0:00:09 14.8M
 57  421M   57  244M    0     0  21.2M      0  0:00:19  0:00:11  0:00:08 13.5M
 62  421M   62  264M    0     0  21.1M      0  0:00:19  0:00:12  0:00:07 15.1M
 67  421M   67  284M    0     0  21.0M      0  0:00:19  0:00:13  0:00:06 16.2M
 72  421M   72  304M    0     0  21.0M      0  0:00:20  0:00:14  0:00:06 17.7M
 76  421M   76  324M    0     0  20.9M      0  0:00:20  0:00:15  0:00:05 18.8M
 81  421M   81  344M    0     0  20.9M      0  0:00:20  0:00:16  0:00:04 20.0M
 86  421M   86  364M    0     0  20.8M      0  0:00:20  0:00:17  0:00:03 20.0M
 91  421M   91  384M    0     0  20.8M      0  0:00:20  0:00:18  0:00:02 20.0M
 93  421M   93  394M    0     0  20.3M      0  0:00:20  0:00:19  0:00:01 18.2M
 96  421M   96  405M    0     0  19.8M      0  0:00:21  0:00:20  0:00:01 16.3M
 98  421M   98  415M    0     0  19.3M      0  0:00:21  0:00:21 --:--:-- 14.3M
100  421M  100  421M    0     0  19.1M      0  0:00:22  0:00:22 --:--:-- 12.6M
Removing intermediate container defaa0a9fe59
 ---> df833a4a98f0
Step 5/27 : RUN tar -zxf /tmp/graalvm-ce-java11-linux-amd64-22.1.0.tar.gz -C /tmp && mv /tmp/graalvm-ce-java11-22.1.0 /usr/lib/graalvm
 ---> Running in 01b75b321d68
Removing intermediate container 01b75b321d68
 ---> ff4c3fe5a33c
Step 6/27 : RUN rm -rf /tmp/*
 ---> Running in 5056b8212071
Removing intermediate container 5056b8212071
 ---> f96e1d349622
Step 7/27 : RUN /usr/lib/graalvm/bin/gu install native-image
 ---> Running in 9c70de6b3c35
/lib64/ld-linux-x86-64.so.2: No such file or directory

> Task :app:dockerBuildNative FAILED

FAILURE: Build failed with an exception.
timyates commented 2 years ago

On an M1 mac, FROM amazonlinux:latest AS graalvm is pulling an ARM container

The dockerfile then pulls the x86 graalvm graalvm-ce-java11-linux-amd64-22.1.0.tar.gz and it all goes downhill from there

abedurftig commented 2 years ago

I generated a Micronaut CLI application via launch including the GraalVM feature. I chose Java 17, but the generated DockerfileNative contains FROM ghcr.io/graalvm/native-image:ol7-java11-22.1.0 AS graalvm. When I run the dockerBuildNative it shows following error and hangs:

Exception in thread "docker-java-stream--81718606" java.lang.UnsatisfiedLinkError: ~/Library/Caches/JNA/temp/jna10424641273110463416.tmp: dlopen(~/Library/Caches/JNA/temp/jna10424641273110463416.tmp, 0x0001): tried: '~/Library/Caches/JNA/temp/jna10424641273110463416.tmp' (fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64e'))
        at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)

When I change the generated DockerfileNative to start with ghcr.io/graalvm/native-image:ol7-java11-22.1.0 AS graalvm and then build with the below command it works fine.

 docker build --platform linux/arm64/v8 -t <image name>:latest ./build/docker/native-main -f ./build/docker/native-main/DockerfileNative

But then, when I run, I get the following:

standard_init_linux.go:228: exec user process caused: no such file or directory

When I do the whole process with dockerBuild, it works.

luisospina-sealed commented 1 year ago

any updates? I'm able to run ./gradlew dockerBuildNative and the image gets created successfully, but when i try to run the image I get the following error:

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

exec /app/application: no such file or directory

charlie-harvey commented 1 year ago
dockerfile {
        if (System.getProperty("os.arch") == "aarch64") {
            baseImage.set("public.ecr.aws/lambda/java:11-arm64")
        } else {
            baseImage.set("public.ecr.aws/lambda/java:11")
        }
}
BramMeerten commented 1 year ago

I get exactly the same error as @luisospina-sealed, any updates?

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
exec /app/application: no such file or directory

I was following the steps from the micronaut guide: https://guides.micronaut.io/latest/micronaut-creating-first-graal-app-maven-java.html

BramMeerten commented 1 year ago

Worked around it by specifying a different docker image. Couldn't find a glibc image compatible with linux/arm64, so used ubuntu for now:

<plugin>
    <groupId>io.micronaut.build</groupId>
    <artifactId>micronaut-maven-plugin</artifactId>
    <configuration>
        <baseImageRun>ubuntu:latest</baseImageRun>
    </configuration>
</plugin>
cprashantgupta commented 11 months ago

I am getting same issue with maven and windows post upgrading to micronaut 4.x where as I am running it on x64 ant not arm64, https://github.com/micronaut-projects/micronaut-maven-plugin/issues/805