关于#dockerfile#的问题,如何解决?(语言-java|操作系统-macos)

macOS+M1+idea+dockerfile
使用命令:mvn clean package dockerfile:push 报错:


java.lang.UnsatisfiedLinkError: /private/var/folders/wh/c4q9yff51jscj2l_v040ybl80000gn/T/jffi4085795475968846364.dylib: dlopen(/private/var/folders/wh/c4q9yff51jscj2l_v040ybl80000gn/T/jffi4085795475968846364.dylib, 0x0001): tried: '/private/var/folders/wh/c4q9yff51jscj2l_v040ybl80000gn/T/jffi4085795475968846364.dylib' (fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/private/var/folders/wh/c4q9yff51jscj2l_v040ybl80000gn/T/jffi4085795475968846364.dylib' (no such file), '/private/var/folders/wh/c4q9yff51jscj2l_v040ybl80000gn/T/jffi4085795475968846364.dylib' (fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64'))
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1950)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1832)
    at java.lang.Runtime.load0(Runtime.java:783)
    at java.lang.System.load(System.java:1100)
    at com.kenai.jffi.internal.StubLoader.loadFromJar(StubLoader.java:371)
    at com.kenai.jffi.internal.StubLoader.load(StubLoader.java:258)
    at com.kenai.jffi.internal.StubLoader.(StubLoader.java:444)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at com.kenai.jffi.Init.load(Init.java:68)
    at com.kenai.jffi.Foreign$InstanceHolder.getInstanceHolder(Foreign.java:49)
    at com.kenai.jffi.Foreign$InstanceHolder.(Foreign.java:45)
    at com.kenai.jffi.Foreign.getInstance(Foreign.java:103)
    at com.kenai.jffi.Type$Builtin.lookupTypeInfo(Type.java:242)
    at com.kenai.jffi.Type$Builtin.getTypeInfo(Type.java:237)
    at com.kenai.jffi.Type.resolveSize(Type.java:155)
    at com.kenai.jffi.Type.size(Type.java:138)
    at jnr.ffi.provider.jffi.NativeRuntime$TypeDelegate.size(NativeRuntime.java:187)
    at jnr.ffi.provider.AbstractRuntime.(AbstractRuntime.java:48)
    at jnr.ffi.provider.jffi.NativeRuntime.(NativeRuntime.java:66)
    at jnr.ffi.provider.jffi.NativeRuntime.(NativeRuntime.java:41)
    at jnr.ffi.provider.jffi.NativeRuntime$SingletonHolder.(NativeRuntime.java:62)
    at jnr.ffi.provider.jffi.NativeRuntime.getInstance(NativeRuntime.java:58)
    at jnr.ffi.provider.jffi.Provider.(Provider.java:29)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.getInstance(FFIProvider.java:68)
    at jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.(FFIProvider.java:57)
    at jnr.ffi.provider.FFIProvider.getSystemProvider(FFIProvider.java:35)
    at jnr.ffi.LibraryLoader.create(LibraryLoader.java:73)
    at jnr.unixsocket.Native.(Native.java:76)
    at jnr.unixsocket.UnixSocketChannel.(UnixSocketChannel.java:101)
    at jnr.unixsocket.UnixSocketChannel.open(UnixSocketChannel.java:60)
    at com.spotify.docker.client.UnixConnectionSocketFactory.createSocket(UnixConnectionSocketFactory.java:69)
    at com.spotify.docker.client.UnixConnectionSocketFactory.createSocket(UnixConnectionSocketFactory.java:44)
    at com.spotify.docker.client.shaded.org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:118)
    at com.spotify.docker.client.shaded.org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
    at com.spotify.docker.client.shaded.org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
    at com.spotify.docker.client.shaded.org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
    at com.spotify.docker.client.shaded.org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
    at com.spotify.docker.client.shaded.org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
    at com.spotify.docker.client.shaded.org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
    at com.spotify.docker.client.shaded.org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
    at com.spotify.docker.client.shaded.org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:71)
    at com.spotify.docker.client.shaded.org.glassfish.jersey.apache.connector.ApacheConnector.apply(ApacheConnector.java:435)
    at com.spotify.docker.client.shaded.org.glassfish.jersey.apache.connector.ApacheConnector$1.run(ApacheConnector.java:491)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at jersey.repackaged.com.google.common.util.concurrent.MoreExecutors$DirectExecutorService.execute(MoreExecutors.java:299)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
    at jersey.repackaged.com.google.common.util.concurrent.AbstractListeningExecutorService.submit(AbstractListeningExecutorService.java:50)
    at jersey.repackaged.com.google.common.util.concurrent.AbstractListeningExecutorService.submit(AbstractListeningExecutorService.java:37)
    at com.spotify.docker.client.shaded.org.glassfish.jersey.apache.connector.ApacheConnector.apply(ApacheConnector.java:487)
    at com.spotify.docker.client.shaded.org.glassfish.jersey.client.ClientRuntime$2.run(ClientRuntime.java:178)
    at com.spotify.docker.client.shaded.org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
    at com.spotify.docker.client.shaded.org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
    at com.spotify.docker.client.shaded.org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at com.spotify.docker.client.shaded.org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at com.spotify.docker.client.shaded.org.glassfish.jersey.internal.Errors.process(Errors.java:267)
    at com.spotify.docker.client.shaded.org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:340)
    at com.spotify.docker.client.shaded.org.glassfish.jersey.client.ClientRuntime$3.run(ClientRuntime.java:210)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:750)



关键应该是这句 fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64'
网上找遍了也没有结果,已经一整天,我对docker不是很熟悉,但是公司部署需要用到dockerfile和maven插件到方式发布版本

fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64' 这一句是CPU架构不对。maven安的是x86_64版本的吧,说的是需要arm64版本。

这个错误通常是由于不兼容的库或包所致。有可能是你的项目中使用了与你的计算机或操作系统不兼容的库或包,或者某些库或包已损坏或缺失。

由于你的计算机是基于Apple M1芯片的,所以需要使用与M1芯片兼容的库和包。你可以尝试以下几个步骤来解决这个问题:

确认你正在使用最新版本的Java和Maven。你可以在命令行中运行以下命令来检查:

java -version
mvn -v
确认你正在使用与M1芯片兼容的Docker。你可以在终端中运行以下命令来检查:

docker version
如果你使用了与M1芯片不兼容的库或包,请尝试更新或替换它们。你可以在你的pom.xml文件中查看你的依赖项并更新其中的不兼容项。

如果你使用的是本地库,可以尝试将其重新构建为与M1芯片兼容的版本。

确认你的操作系统和开发环境都是最新的,并安装了所有可用的更新。