GDAL3.x在Docker中的环境配置

之前打包GDAL代码在docker中运行以后报错,报错信息如下:

之后查找各方资料发现是GDAL运行需要的so文件(linux环境,windows是dll文件)没有被找到,

搜寻了多方资料总算解决了,下面贴出我的解决步骤。

1. 配置POM

1. 引入依赖

<dependency>
    <groupId>org.gdal</groupId>
    <artifactId>gdal</artifactId>
    <version>3.2.0</version>
</dependency>

2. 配置resource

由于gdal.jar被放置到了resource/lib目录下,故需要在新增一下配置,不然打包的时候识别不到

(不知道为啥jdal.jar放这里的可以去看我的另外一篇文章:Springboot+GDAL3.x在windows上配置开发环境-CSDN博客

<resource>
    <directory>${project.basedir}\src\main\resources\jar</directory>
    <targetPath>BOOT-INF/lib/</targetPath>
    <includes>
        <include>**/*.jar</include>
    </includes>
</resource>

2. 新增GDAL环境配置类

/**
 * @author : chenss
 * @date : 2023/11/25
 */
@Component
@Slf4j
public class GdalLoaderEngine {

    private static final String DefaultOsPath = "gdal.os.path";

    /**
     * gdal环境初始化
     */
    @PostConstruct
    public void init() {
        //1.尝试从变量中获取gdal.os.path
        String property = System.getProperty(DefaultOsPath);
        System.out.println("*********"+property+"****************");
        boolean isOk = false;
        boolean isWin = false;
        if (StringUtils.isNotBlank(property)) {
            log.info("-------GdalLoaderEngine1-------尝试从[{}]中获取gdal配置文件", property);
            isOk = loadGdal(property);
        }
        //4.如果是Linux环境最后还没有则从/usr/lib 中加载
        if (!isOk && !System.getProperty("os.name").toLowerCase().contains("win")) {
            String filePath = "/usr/lib"+ "/libgdaljni.so";
            log.info("-------GdalLoaderEngine4.1-------尝试从[{}]中获取gdal配置文件", filePath);
            isOk = loadGdal(filePath);
            if(!isOk){
                filePath="/usr/lib"+ "/libgdalalljni.so";
                log.info("-------GdalLoaderEngine4.2-------尝试从[{}]中获取gdal配置文件", filePath);
                isOk = loadGdal(filePath);
            }
        }

        //如果还没获取到配置文件 则打印错误日志
        if (!isOk) {
            log.error("-------GdalLoaderEngine-------获取gdal环境失败!!,请检查配置文件!!");
        } else {
            //注册gdal驱动
            gdal.AllRegister();
            log.info("-------GdalLoaderEngine------- 加载配置成功");
        }
    }

    private static boolean loadGdal(String gdalPath) {
        File file = new File(gdalPath);
        if (!file.exists()) {
            return false;
        }
        try {
            //加载驱动
            System.load(file.getAbsolutePath());
        } catch (Exception e) {
            return false;
        }
        return true;
    }
}

3.镜像拉取及Dockerfile编写

链接: OSGeo/gdal github地址

在Linux上,gdal官网上没有编译好的包,要自己去下gdal的源码包,然后自己编译,后面会生成.so文件和jar包。我用的方法是拉去了gdal3.2的镜像,把jar包丢进去直接运行,下面贴出我的Dockerfile。

FROM osgeo/gdal:3.2.0
ENV work_dir /home
ENV LANG C.UTF-8
WORKDIR ${work_dir}
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY simsun.ttc /usr/share/fonts/ttf-dejavu/simsun.ttc
COPY simsun.ttf /usr/share/fonts/ttf-dejavu/simsun.ttf
COPY ./xx.jar /tmp/xx.jar
ENTRYPOINT java -jar -Xmx1536m  /tmp/km-raster-core-1.0-SNAPSHOT.jar -D java.awt.headless=true

基于Dockerfile构造镜像,运行容器后可以看到日志中提示GDAL环境配置成功。

下面贴出我的参考连接:

windows和docker环境下springboot整合gdal3.x-CSDN博客

java springboot结合gdal打包docker镜像_docker gdal镜像-CSDN博客

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

后端小肥肠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值