You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派Docker容器中运行Pi4J时本地库加载失败求助

在Docker容器中运行Pi4J应用时本地库加载失败问题

问题概述

  • 树莓派主机上直接运行Pi4J应用一切正常,但在Docker容器内运行时,Pi4J本地库无法加载。

相关配置

pom.xml配置

<properties>
    <!-- DEPENDENCIES VERSIONS -->
    <pi4j.version>2.1.1</pi4j.version>
</properties>

<dependencies>

    <!-- include Pi4J Core -->
    <dependency>
        <groupId>com.pi4j</groupId>
        <artifactId>pi4j-core</artifactId>
        <version>${pi4j.version}</version>
    </dependency>

    <!-- include Pi4J Plugins (Platforms and I/O Providers) -->
    <dependency>
        <groupId>com.pi4j</groupId>
        <artifactId>pi4j-plugin-raspberrypi</artifactId>
        <version>${pi4j.version}</version>
    </dependency>
    <dependency>
        <groupId>com.pi4j</groupId>
        <artifactId>pi4j-plugin-pigpio</artifactId>
        <version>${pi4j.version}</version>
    </dependency>
</dependencies>

Dockerfile内容

FROM eclipse-temurin:17-jdk as builder
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
RUN java -Djarmode=layertools -jar application.jar extract

FROM eclipse-temurin:17-jre-focal
COPY --from=builder dependencies/ ./
COPY --from=builder snapshot-dependencies/ ./
COPY --from=builder spring-boot-loader/ ./
COPY --from=builder application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]

错误信息

未设置pi4j.library.path时的错误

java.lang.UnsatisfiedLinkError: /tmp/libpi4j-pigpio3285308132227026624.so: libpigpio.so.1: 
 cannot open shared object file: No such file or directory
...
Caused by: java.lang.UnsatisfiedLinkError: Pi4J was unable to extract and load the native library
 [/lib/aarch64/libpi4j-pigpio.so] from the embedded resources inside this JAR 
 [/application/BOOT-INF/lib/pi4j-library-pigpio-2.1.1.jar]. to a temporary location on this
 system.  You can alternatively define the 'pi4j.library.path' system property to override this
 behavior and specify the library path.

注:容器内/tmp文件夹权限为777

设置pi4j.library.path并添加容器卷后仍报错

Caused by: java.lang.UnsatisfiedLinkError: /app/data/pi4j/libpi4j-pigpio.so: libpigpio.so.1: 
 cannot open shared object file: No such file or directory

问题排查更新

更新1(2022-09-01)

对比主机与容器内ldd命令输出,确认容器中缺失libpigpio.so.1库:

  • 主机端ldd libpi4j-pigpio.so输出:
ldd libpi4j-pigpio.so
    linux-vdso.so.1 (0x0000007f8460d000)
    libpigpio.so.1 => /lib/libpigpio.so.1 (0x0000007f844ca000)
    libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007f84358000)
    /lib/ld-linux-aarch64.so.1 (0x0000007f845df000)
    libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000007f843
  • 容器内ldd libpi4j-pigpio.so输出:
ldd libpi4j-pigpio.so
    linux-vdso.so.1 (0x0000007fb06ac000)
    libpigpio.so.1 => not found
    libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007fb04f0000)
    /lib/ld-linux-aarch64.so.1 (0x0000007fb067c000)

更新2(2022-09-01)

已确认问题核心是容器内缺少libpigpio.so.1库,目前临时解决方案是将主机的该库挂载到容器:

volumes:
  - type: bind
    source: /lib/libpigpio.so.1
    target: /lib/libpigpio.so.1
    read_only: true

求助

寻求有Pi4J与Docker使用经验的开发者提供更完善的解决方案,谢谢!

内容的提问来源于stack exchange,提问作者wutoso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:39:52