簡體   English   中英

Docker Mac M1 芯片上的鏡像構建失敗

[英]Docker image build failed on Mac M1 chip

我正在嘗試在 maven 項目中構建一個簡單的 docker 圖像,將圖像構建添加為 maven 構建過程的一部分:

<build>
        <finalName>my-api</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- Docker -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.6</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>build</goal>
                            <!-- <goal>push</goal> -->
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <repository>reponame/${project.name}</repository>
                    <tag>${project.version}</tag>
                    <skipDockerInfo>true</skipDockerInfo>
                </configuration>
            </plugin>

        </plugins>

    </build>
FROM openjdk:8-jdk-alpine
VOLUME /tmp
EXPOSE 8080
ADD target/*.jar app.jar
ENTRYPOINT [ "sh", "-c", "java -jar /app.jar" ]

但是它失敗了,總是得到相同的錯誤跟蹤,無論我使用哪個圖像,錯誤仍然存在。

錯誤:

引起:com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException:java.lang.UnsatisfiedLinkError:無法加載 FFI 提供程序 jnr.ffi.provider.jffi.Provider

Caused by: java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: /private/var/folders/hz/rgppp8250rsdp86kf_tfjvqw0000gp/T/jffi8502916075702391528.dylib: dlopen(/private/var/folders/hz/rgppp8250rsdp86kf_tfjvqw0000gp/T/jffi8502916075702391528.dylib , 0x0001): 試過: '/private/var/folders/hz/rgppp8250rsdp86kf_tfjvqw0000gp/T/jffi8502916075702391528.dylib' (fat 文件, 但缺少兼容架構 (有 'i386,x86_64', 需要 'arm64e')), '/usr /lib/jffi8502916075702391528.dylib'(沒有這樣的文件)

我試過的其他圖片:

  • openjdk:13-alpine3.9
  • openjdk:8-jre-alpine3.9
  • azul/zulu-openjdk-alpine:17.0.2-17.32.13-arm64

我的 java 版本:openjdk 版本“11.0.13” 2021-10-19 LTS

我的 Docker 版本:Docker 版本 20.10.11,build dea9396

提前致謝。

看起來dockerfile-maven-plugin使用基於 x86 架構的運行時,並且無法在 Apple M1 (Arm) 上運行。
該插件現在處於非活動狀態,因此您應該嘗試其他方法,例如fabric8-maven-plugin

          <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.38.1</version>
            <executions>
                <execution>
                    <id>build</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>build</goal>
                    </goals>
                </execution>
            </executions>
        </plugin> 

不再維護 spotify docker maven 插件。 他們需要將依賴升級到支持 aarch64 的版本。

在我們的例子中,需要進行大量重構才能移動到 fabric8 的插件或使用 maven exec,因此我們想繼續使用 spotify 插件。

幸運的是,您可以通過向插件部分添加<dependencies>部分來強制插件使用特定的依賴項。

                <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>dockerfile-maven-plugin</artifactId>
                    <version>1.4.6</version>
                    <dependencies>
                        <dependency>
                            <groupId>com.github.jnr</groupId>
                            <artifactId>jnr-unixsocket</artifactId>
                            <version>0.38.14</version>
                        </dependency>
                    </dependencies>
                </plugin>

我遇到了同樣的問題。根據錯誤消息,應該是與 docker 守護程序的連接錯誤。似乎該插件不支持 Arm 套接字,您可以這樣做:

(1) 安裝socat

brew install socat

(2)設置端口轉發

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

(3) 設置環境變量

export DOCKER_HOST=tcp://127.0.0.1:2375

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM