Apple M1 使用 dockerfile-maven-plugin 构建镜像失败

15 篇文章 0 订阅
2 篇文章 0 订阅

解决方案

安装 socat

brew install socat

使用 socat 将 unix socket 代理到 tcp 端口

socat TCP-LISTEN:2375,range=127.0.0.1/32,reuseaddr,fork UNIX-CLIENT:/var/run/docker.sock

设置环境变量 DOCKER_HOST

export DOCKER_HOST=tcp://127.0.0.1:2375

镜像构建成功

[INFO] --- dockerfile-maven-plugin:1.4.13:build (shardingsphere-proxy-bin) @ shardingsphere-integration-test-fixture ---
[INFO] dockerfile: null
[INFO] contextDirectory: /Users/wuweijie/IdeaProjects/shardingsphere/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-fixture
[INFO] Building Docker context /Users/wuweijie/IdeaProjects/shardingsphere/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-fixture
[INFO] Path(dockerfile): null
[INFO] Path(contextDirectory): /Users/wuweijie/IdeaProjects/shardingsphere/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-fixture
[INFO] 
[INFO] Image will be built as apache/shardingsphere-proxy-test:latest
[INFO] 
[INFO] Step 1/11 : FROM openjdk:8-jdk-alpine
[INFO] 
[INFO] Pulling from library/openjdk
[INFO] Image 0362ad1dd800: Pulling fs layer
[INFO] Image 571218f61883: Pulling fs layer
[INFO] Image abe576d65b4c: Pulling fs layer
[INFO] Image 571218f61883: Downloading
[INFO] Image 571218f61883: Verifying Checksum
[INFO] Image 571218f61883: Download complete
[INFO] Image 0362ad1dd800: Downloading
[INFO] Image abe576d65b4c: Downloading
[INFO] Image 0362ad1dd800: Verifying Checksum
[INFO] Image 0362ad1dd800: Download complete
[INFO] Image 0362ad1dd800: Extracting
[INFO] Image 0362ad1dd800: Pull complete
[INFO] Image 571218f61883: Extracting
[INFO] Image 571218f61883: Pull complete
[INFO] Image abe576d65b4c: Verifying Checksum
[INFO] Image abe576d65b4c: Download complete
[INFO] Image abe576d65b4c: Extracting
[INFO] Image abe576d65b4c: Pull complete
[INFO] Digest: sha256:94792824df2df33402f201713f932b58cb9de94a0cd524164a0f2283343547b3
[INFO] Status: Downloaded newer image for openjdk:8-jdk-alpine
[INFO]  ---> e4105db9d469
[INFO] Step 2/11 : ARG APP_NAME
[INFO] 
[INFO]  ---> Running in a45c265a7eff
[INFO] Removing intermediate container a45c265a7eff
[INFO]  ---> 46a87b168ea2
[INFO] Step 3/11 : ADD target/${APP_NAME}.tar.gz /opt
[INFO] 
[INFO]  ---> a931814b7ec4
[INFO] Step 4/11 : RUN mv /opt/${APP_NAME} /opt/shardingsphere-proxy
[INFO] 
[INFO]  ---> Running in 71a22a8f1692
[INFO] Removing intermediate container 71a22a8f1692
[INFO]  ---> cbe6b7d6a9a3
[INFO] Step 5/11 : EXPOSE 3307
[INFO] 
[INFO]  ---> Running in 091095a271fb
[INFO] Removing intermediate container 091095a271fb
[INFO]  ---> e8ecdb2881c2
[INFO] Step 6/11 : EXPOSE 3308
[INFO] 
[INFO]  ---> Running in a32bfd3031d7
[INFO] Removing intermediate container a32bfd3031d7
[INFO]  ---> 9d6e24f81961
[INFO] Step 7/11 : WORKDIR /opt/shardingsphere-proxy
[INFO] 
[INFO]  ---> Running in f36b96a8c1e9
[INFO] Removing intermediate container f36b96a8c1e9
[INFO]  ---> 8837c5a4507c
[INFO] Step 8/11 : RUN cat bin/start.sh | tr -d '\r' > _start.sh && mv _start.sh bin/start.sh
[INFO] 
[INFO]  ---> Running in 9906de0e1fac
[INFO] Removing intermediate container 9906de0e1fac
[INFO]  ---> a5298ce74ff4
[INFO] Step 9/11 : RUN cat bin/stop.sh | tr -d '\r' > _stop.sh && mv _stop.sh bin/stop.sh
[INFO] 
[INFO]  ---> Running in f28d4cc7ada5
[INFO] Removing intermediate container f28d4cc7ada5
[INFO]  ---> 110595b1750e
[INFO] Step 10/11 : RUN chmod +x -R ./bin
[INFO] 
[INFO]  ---> Running in a90ea4730981
[INFO] Removing intermediate container a90ea4730981
[INFO]  ---> d1ce855711a4
[INFO] Step 11/11 : CMD /opt/shardingsphere-proxy/bin/start.sh && tail -f /opt/shardingsphere-proxy/logs/stdout.log
[INFO] 
[INFO]  ---> Running in 27fc7eeaad04
[INFO] Removing intermediate container 27fc7eeaad04
[INFO]  ---> ec5562dbdc6f
[INFO] Successfully built ec5562dbdc6f
[INFO] Successfully tagged apache/shardingsphere-proxy-test:latest
[INFO] 
[INFO] Detected build of image with id ec5562dbdc6f
[INFO] Building jar: /Users/wuweijie/IdeaProjects/shardingsphere/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-fixture/target/shardingsphere-integration-test-fixture-5.0.0-RC1-SNAPSHOT-docker-info.jar
[INFO] Successfully built apache/shardingsphere-proxy-test:latest

原因分析

macOS + Docker Desktop

Docker 在本地一般使用 unix socket 和 Docker daemon 交互,可能 dockerfile-maven-plugin 所引用的库还没支持 macOS aarch64,无法使用 unix socket,导致在 macOS aarch64 使用 dockerfile-maven-plugin 构建镜像报错。

从报错信息初步判断,是创建和 unix socket 的连接出现了问题

java.lang.UnsatisfiedLinkError: /private/var/folders/vg/n0l55hdj5037l7rdjth2t2040000gn/T/jffi4267946790751720772.dylib: dlopen(/private/var/folders/vg/n0l55hdj5037l7rdjth2t2040000gn/T/jffi4267946790751720772.dylib, 1): no suitable image found.  Did find:
	/private/var/folders/vg/n0l55hdj5037l7rdjth2t2040000gn/T/jffi4267946790751720772.dylib: no matching architecture in universal wrapper
	/private/var/folders/vg/n0l55hdj5037l7rdjth2t2040000gn/T/jffi4267946790751720772.dylib: no matching architecture in universal wrapper
	at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
	at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:384)
	at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:228)
	at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:170)
	at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2389)
	at java.base/java.lang.Runtime.load0(Runtime.java:755)
	at java.base/java.lang.System.load(System.java:1953)
	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.<clinit>(StubLoader.java:444)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:467)
	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.<clinit>(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 com.spotify.docker.client.shaded.jnr.ffi.provider.jffi.NativeRuntime$TypeDelegate.size(NativeRuntime.java:187)
	at com.spotify.docker.client.shaded.jnr.ffi.provider.AbstractRuntime.<init>(AbstractRuntime.java:48)
	at com.spotify.docker.client.shaded.jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:66)
	at com.spotify.docker.client.shaded.jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:41)
	at com.spotify.docker.client.shaded.jnr.ffi.provider.jffi.NativeRuntime$SingletonHolder.<clinit>(NativeRuntime.java:62)
	at com.spotify.docker.client.shaded.jnr.ffi.provider.jffi.NativeRuntime.getInstance(NativeRuntime.java:58)
	at com.spotify.docker.client.shaded.jnr.ffi.provider.jffi.Provider.<init>(Provider.java:29)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128)
	at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:347)
	at java.base/java.lang.Class.newInstance(Class.java:645)
	at com.spotify.docker.client.shaded.jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.getInstance(FFIProvider.java:68)
	at com.spotify.docker.client.shaded.jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.<clinit>(FFIProvider.java:57)
	at com.spotify.docker.client.shaded.jnr.ffi.provider.FFIProvider.getSystemProvider(FFIProvider.java:35)
	at com.spotify.docker.client.shaded.jnr.ffi.LibraryLoader.create(LibraryLoader.java:73)
	at com.spotify.docker.client.shaded.jnr.unixsocket.Native.<clinit>(Native.java:76)
	at com.spotify.docker.client.shaded.jnr.unixsocket.UnixSocketChannel.<init>(UnixSocketChannel.java:101)
	at com.spotify.docker.client.shaded.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.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at jersey.repackaged.com.google.common.util.concurrent.MoreExecutors$DirectExecutorService.execute(MoreExecutors.java:299)
	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123)
	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.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
### 回答1: dockerfile-maven-plugin 是一个 Maven 插件,用于自动生成 Docker 镜像Dockerfile 文件。它可以根据 Maven 项目的 pom.xml 文件和一些配置参数,自动生成 Dockerfile 文件,并将其用于构建 Docker 镜像。这个插件可以大大简化 Docker 镜像构建的过程,提高开发效率。 ### 回答2: dockerfile-maven-plugin 是一个用于帮助在 Maven 项目中使用 Dockerfile 构建和管理 Docker 镜像的插件。 在传统的开发中,我们需要手动构建 Docker 镜像,并在 Dockerfile 中定义构建步骤和依赖关系。而使用 dockerfile-maven-plugin 可以将这一过程集成到 Maven 构建中,进一步简化了开发过程。 使用 dockerfile-maven-plugin,我们可以在 Maven 的 pom.xml 文件中配置一系列的构建参数和指令。这些参数包括 Dockerfile 文件路径、镜像名称、版本、标签等。通过这些配置,插件可以自动地根据 Dockerfile 构建 Docker 镜像,并将其推送到远程镜像仓库。 该插件还提供了一些额外的特性,例如多阶段构建构建缓存、构建参数传递等。其中,多阶段构建允许我们按照不同的阶段构建镜像,以便优化镜像大小和构建速度;构建缓存则可以在多次构建中重复使用相同的构建步骤,避免重复构建构建参数传递则可以在构建过程中传递环境变量或者其他参数,灵活控制镜像构建的过程。 总而言之,dockerfile-maven-plugin 提供了一种便捷的方式,将 Docker 镜像构建过程整合到 Maven 构建中。使用该插件,我们可以在 Maven 构建过程中自动构建和管理 Docker 镜像,提高了开发效率和部署一致性。 ### 回答3: Dockerfile-maven-plugin是一个maven插件,用于帮助开发人员在构建过程中生成Docker镜像Docker镜像是一个轻量级、可移植、自包含的容器,使应用程序的部署更加简单和可靠。 使用Dockerfile-maven-plugin,我们可以为项目配置一个Dockerfile文件,该文件指定了如何构建和运行应用程序的容器。该插件提供了一系列的目标和参数,用于自动化构建镜像打包和标记、上传到Docker Hub等操作。 在配置中,我们可以指定应用程序的依赖项、环境变量、端口映射等信息,以及Docker镜像的基础映像和其他镜像相关的配置。此外,我们还可以使用插件的额外功能,如构建多阶段、使用多个Dockerfile等。 使用Dockerfile-maven-plugin,我们可以在maven构建过程中集成Docker镜像构建和发布,减少了手动操作的复杂性和错误的可能性。此外,该插件还可以与其他maven插件和工具集成,实现更复杂的自动化构建流程。 总而言之,Dockerfile-maven-plugin是一个方便的maven插件,用于在项目构建过程中生成Docker镜像。它帮助简化了Docker容器的构建和部署过程,提高了开发人员的效率,并且可以与其他工具集成,实现更复杂的构建流程。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuweijie@apache.org

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值