Skip to content
This repository has been archived by the owner on Mar 31, 2022. It is now read-only.

Plugin fails to run on Apple silicon (M1, M1 Pro, M1 Max) #394

Open
davidjayb opened this issue Feb 17, 2022 · 2 comments
Open

Plugin fails to run on Apple silicon (M1, M1 Pro, M1 Max) #394

davidjayb opened this issue Feb 17, 2022 · 2 comments

Comments

@davidjayb
Copy link

Is this a BUG REPORT or FEATURE REQUEST?:

BUG REPORT

Description

The plugin fails to build the Docker image. This seems to be regardless of the plugin configuration.

How to reproduce

Run the plugin on Apple silicon, such as a MacBook Pro with the M1 Pro chip.

mvn clean install

What do you expect

The plugin should be able to build the docker image.

What happened instead

[Describe the actual results]

Software:

  • docker version:
Client: Docker Engine - Community
 Version:           20.10.12
 API version:       1.41
 Go version:        go1.17.5
 Git commit:        e91ed5707e
 Built:             Sun Dec 12 06:28:24 2021
 OS/Arch:           darwin/arm64
 Context:           default
 Experimental:      true
Server: Docker Engine - Community
 Engine:
  Version:          20.10.12
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.12
  Git commit:       459d0df
  Built:            Mon Dec 13 11:43:07 2021
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.4.12
  GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
  • Spotify's dockerfile-maven version: 1.4.13

Full backtrace

[INFO] --- dockerfile-maven-plugin:1.4.13:build (default) @ my-project ---
[INFO] dockerfile: null
[INFO] contextDirectory: /Users/myuser/app/my-project/docker
[INFO] Building Docker context /Users/myuser/app/my-project/docker
[INFO] Path(dockerfile): null
[INFO] Path(contextDirectory): /Users/myuser/app/my-project/docker
[INFO]
[INFO] Image will be built as my-repo/my-project:0.0.1-SNAPSHOT
[INFO]
[WARNING] An attempt failed, will retry 1 more times
<snip>
[INFO] dockerfile: null
[INFO] contextDirectory: /Users/myuser/app/my-project/docker
[INFO] Building Docker context /Users/myuser/app/my-project/docker
[INFO] Path(dockerfile): null
[INFO] Path(contextDirectory): /Users/myuser/app/my-project/docker
[INFO]
[INFO] Image will be built as my-repo/my-project:0.0.1-SNAPSHOT
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.936 s
[INFO] Finished at: 2022-02-17T13:04:18-07:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.spotify:dockerfile-maven-plugin:1.4.13:build (default) on project my-project: Could not build image: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: java.lang.UnsatisfiedLinkError: could not load FFI provider com.spotify.docker.client.shaded.jnr.ffi.provider.jffi.Provider: ExceptionInInitializerError: Can't overwrite cause with java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: /private/var/folders/h8/cj2lhn7n2wx3vd38y5q71fc00000gn/T/jffi14954787931679265064.dylib: dlopen(/private/var/folders/h8/cj2lhn7n2wx3vd38y5q71fc00000gn/T/jffi14954787931679265064.dylib, 0x0001): tried: '/private/var/folders/h8/cj2lhn7n2wx3vd38y5q71fc00000gn/T/jffi14954787931679265064.dylib' (fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64e')), '/usr/lib/jffi14954787931679265064.dylib' (no such file)
[ERROR] 	at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
[ERROR] 	at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:384)
[ERROR] 	at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:228)
[ERROR] 	at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:170)
[ERROR] 	at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2389)
[ERROR] 	at java.base/java.lang.Runtime.load0(Runtime.java:755)
[ERROR] 	at java.base/java.lang.System.load(System.java:1953)
[ERROR] 	at com.kenai.jffi.internal.StubLoader.loadFromJar(StubLoader.java:371)
[ERROR] 	at com.kenai.jffi.internal.StubLoader.load(StubLoader.java:258)
[ERROR] 	at com.kenai.jffi.internal.StubLoader.<clinit>(StubLoader.java:444)
[ERROR] 	at java.base/java.lang.Class.forName0(Native Method)
[ERROR] 	at java.base/java.lang.Class.forName(Class.java:467)
[ERROR] 	at com.kenai.jffi.Init.load(Init.java:68)
[ERROR] 	at com.kenai.jffi.Foreign$InstanceHolder.getInstanceHolder(Foreign.java:49)
[ERROR] 	at com.kenai.jffi.Foreign$InstanceHolder.<clinit>(Foreign.java:45)
[ERROR] 	at com.kenai.jffi.Foreign.getInstance(Foreign.java:103)
[ERROR] 	at com.kenai.jffi.Type$Builtin.lookupTypeInfo(Type.java:242)
[ERROR] 	at com.kenai.jffi.Type$Builtin.getTypeInfo(Type.java:237)
[ERROR] 	at com.kenai.jffi.Type.resolveSize(Type.java:155)
[ERROR] 	at com.kenai.jffi.Type.size(Type.java:138)
[ERROR] 	at com.spotify.docker.client.shaded.jnr.ffi.provider.jffi.NativeRuntime$TypeDelegate.size(NativeRuntime.java:187)
[ERROR] 	at com.spotify.docker.client.shaded.jnr.ffi.provider.AbstractRuntime.<init>(AbstractRuntime.java:48)
[ERROR] 	at com.spotify.docker.client.shaded.jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:66)
[ERROR] 	at com.spotify.docker.client.shaded.jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:41)
[ERROR] 	at com.spotify.docker.client.shaded.jnr.ffi.provider.jffi.NativeRuntime$SingletonHolder.<clinit>(NativeRuntime.java:62)
[ERROR] 	at com.spotify.docker.client.shaded.jnr.ffi.provider.jffi.NativeRuntime.getInstance(NativeRuntime.java:58)
[ERROR] 	at com.spotify.docker.client.shaded.jnr.ffi.provider.jffi.Provider.<init>(Provider.java:29)
[ERROR] 	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[ERROR] 	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
[ERROR] 	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[ERROR] 	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
[ERROR] 	at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128)
[ERROR] 	at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:347)
[ERROR] 	at java.base/java.lang.Class.newInstance(Class.java:645)
[ERROR] 	at com.spotify.docker.client.shaded.jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.getInstance(FFIProvider.java:68)
[ERROR] 	at com.spotify.docker.client.shaded.jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.<clinit>(FFIProvider.java:57)
[ERROR] 	at com.spotify.docker.client.shaded.jnr.ffi.provider.FFIProvider.getSystemProvider(FFIProvider.java:35)
[ERROR] 	at com.spotify.docker.client.shaded.jnr.ffi.LibraryLoader.create(LibraryLoader.java:73)
[ERROR] 	at com.spotify.docker.client.shaded.jnr.unixsocket.Native.<clinit>(Native.java:76)
[ERROR] 	at com.spotify.docker.client.shaded.jnr.unixsocket.UnixSocketChannel.<init>(UnixSocketChannel.java:101)
[ERROR] 	at com.spotify.docker.client.shaded.jnr.unixsocket.UnixSocketChannel.open(UnixSocketChannel.java:60)
[ERROR] 	at com.spotify.docker.client.UnixConnectionSocketFactory.createSocket(UnixConnectionSocketFactory.java:69)
[ERROR] 	at com.spotify.docker.client.UnixConnectionSocketFactory.createSocket(UnixConnectionSocketFactory.java:44)
[ERROR] 	at com.spotify.docker.client.shaded.org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:118)
[ERROR] 	at com.spotify.docker.client.shaded.org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
[ERROR] 	at com.spotify.docker.client.shaded.org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
[ERROR] 	at com.spotify.docker.client.shaded.org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
[ERROR] 	at com.spotify.docker.client.shaded.org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
[ERROR] 	at com.spotify.docker.client.shaded.org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
[ERROR] 	at com.spotify.docker.client.shaded.org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
[ERROR] 	at com.spotify.docker.client.shaded.org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
[ERROR] 	at com.spotify.docker.client.shaded.org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:71)
[ERROR] 	at com.spotify.docker.client.shaded.org.glassfish.jersey.apache.connector.ApacheConnector.apply(ApacheConnector.java:435)
[ERROR] 	at com.spotify.docker.client.shaded.org.glassfish.jersey.apache.connector.ApacheConnector$1.run(ApacheConnector.java:491)
[ERROR] 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
[ERROR] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[ERROR] 	at jersey.repackaged.com.google.common.util.concurrent.MoreExecutors$DirectExecutorService.execute(MoreExecutors.java:299)
[ERROR] 	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123)
[ERROR] 	at jersey.repackaged.com.google.common.util.concurrent.AbstractListeningExecutorService.submit(AbstractListeningExecutorService.java:50)
[ERROR] 	at jersey.repackaged.com.google.common.util.concurrent.AbstractListeningExecutorService.submit(AbstractListeningExecutorService.java:37)
[ERROR] 	at com.spotify.docker.client.shaded.org.glassfish.jersey.apache.connector.ApacheConnector.apply(ApacheConnector.java:487)
[ERROR] 	at com.spotify.docker.client.shaded.org.glassfish.jersey.client.ClientRuntime$2.run(ClientRuntime.java:178)
[ERROR] 	at com.spotify.docker.client.shaded.org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
[ERROR] 	at com.spotify.docker.client.shaded.org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
[ERROR] 	at com.spotify.docker.client.shaded.org.glassfish.jersey.internal.Errors.process(Errors.java:315)
[ERROR] 	at com.spotify.docker.client.shaded.org.glassfish.jersey.internal.Errors.process(Errors.java:297)
[ERROR] 	at com.spotify.docker.client.shaded.org.glassfish.jersey.internal.Errors.process(Errors.java:267)
[ERROR] 	at com.spotify.docker.client.shaded.org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:340)
[ERROR] 	at com.spotify.docker.client.shaded.org.glassfish.jersey.client.ClientRuntime$3.run(ClientRuntime.java:210)
[ERROR] 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
[ERROR] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[ERROR] 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[ERROR] 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[ERROR] 	at java.base/java.lang.Thread.run(Thread.java:833)
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

The root cause seems to be (fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64e'))

@jedvardsson
Copy link

This project has been abandoned. The error you came across is from Java Native Runtime used by Spotify docker-client project which has been abandoned too. I think maven-exec-plugin is a safer option.

@davidjayb
Copy link
Author

davidjayb commented Mar 1, 2022

Thank you @jedvardsson . This was actually quite easy to do:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
            <id>docker-build</id>
            <phase>install</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <executable>docker</executable>
                <workingDirectory>${project.basedir}</workingDirectory>
                <arguments>
                    <argument>build</argument>
                    <argument>-f</argument>
                    <argument>docker/Dockerfile</argument>
                    <argument>--build-arg</argument>
                    <argument>JAR_FILE=target/${project.artifactId}-${project.version}-${jar.suffix}.jar</argument>
                    <argument>-t</argument>
                    <argument>${parent.groupId}/${parent.artifactId}/${project.artifactId}:${project.version}</argument>
                    <argument>.</argument>
                </arguments>
            </configuration>
        </execution>
    </executions>
</plugin>

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants