命令中出现过多次apk add cmake和apk del cmake包的操作,可以考虑只安装一次,最后再删除。
常见问题7:
#17 406.4 /usr/lib/gcc/x86_64-alpine-linux-musl/10.3.1/../../../../x86_64-alpine-linux-musl/bin/ld: warning: libdl.so.2, needed by /lib/libFileGDBAPI.so, not found (try using -rpath or -rpath-link)
#17 406.4 /usr/lib/gcc/x86_64-alpine-linux-musl/10.3.1/../../../../x86_64-alpine-linux-musl/bin/ld: warning: libpthread.so.0, needed by /lib/libFileGDBAPI.so, not found (try using -rpath or -rpath-link)
#17 406.4 /usr/lib/gcc/x86_64-alpine-linux-musl/10.3.1/../../../../x86_64-alpine-linux-musl/bin/ld: warning: librt.so.1, needed by /lib/libFileGDBAPI.so, not found (try using -rpath or -rpath-link)
#17 406.4 /usr/lib/gcc/x86_64-alpine-linux-musl/10.3.1/../../../../x86_64-alpine-linux-musl/bin/ld: warning: libm.so.6, needed by /lib/libFileGDBAPI.so, not found (try using -rpath or -rpath-link)
#17 406.4 /usr/lib/gcc/x86_64-alpine-linux-musl/10.3.1/../../../../x86_64-alpine-linux-musl/bin/ld: warning: libc.so.6, needed by /lib/libFileGDBAPI.so, not found (try using -rpath or -rpath-link)
由于要将GDB数据导入到PG数据库,且要支持中文别名,所以不能直接使用官方提供的Docker镜像。
原来我们基于CentOS编译的GDAL镜像有2G之巨,不便于内外网拷备,迫切需要制作一个体积小的GDAL镜像。
制作小镜像首先基础镜像肯定要小,于是选用了alpine作为基础镜像:
FROM alpine:3.14
常见错误1:
No such file or directory
官方的Dockerfile中,软件源代码是通过wget方法在github上下载的,由于github在国内的不稳定性,下载大概率失败,就导致解压时无法读取到这个文件。可以下载好文件后放在本地来解决这个问题。
常见错误2: tar:invalid magic tar:short read tar: /opt/gdal-master.tar.gz: not found in archive
官方解压命令用的: tar xz,这个与打包的时候参数不匹配,导致解压失败,应改为:tar xzf命令。
常见问题3: 下载速度慢。 系统默认是在
https://dl-cdm.alpinelinux.org/alpine/v3.14/
这个地址去下载软件安装包的,这个地址不稳定,会导致下载速度过慢或失败的问题。常见问题4: 未使用缓存导致安装慢。
命令中有很多
--no-cache
的命令,导致每次安装都未使用系统缓存,编译和包下载速度变慢。可以检查一下命令,如果不是必须的话可以移除对应命令行的
--no-cache
命令。常见问题5:
Permission denied
安装软件时系统执行权限不够或网络不稳定都可能造成这个问题。
一是通过在:
FROM alpine:3.14
命令的下一行添加:USER root
命令提升权限。 二是检查网络增加网络稳定性,如无法提升网络稳定性就只有多试几次咯。常见问题6: 软件重复安装导致安装慢。
命令中出现过多次
apk add cmake
和apk del cmake
包的操作,可以考虑只安装一次,最后再删除。常见问题7:
FilGDBAPI对linux操作系统有一定要求,在alpine系统中没有ld命令,所以报了以上错误。
试过添加libc6-compat包,报错减少了,但是还出现libdl.so.2的报错。
经验证发现alpine的ld命令在/usr/x86_64-alpine-linux-musl/bin目录下。
骑过安装libc6-compat这个包可以解决其它几个报错,但是libdl.so.2缺失的报错依旧还在。
使用过高版本(20以上)的ubuntu基础镜像时安装gcc和g++库时容易报错,换个低点的版本就好了。
好不容易编译成功了可能会报错:
首先是要找看/usr/local/lib目录下是否有这个文件 ,然后可以查看文件是否引用了libgdal.so.29这个文件: /etc/ld.so.conf
修改后执行命令更新配置,会列出来一大堆引用信息: /sbin/ldconfig -v
其中可能会报错: /sbin/ldconfig.real: /usr/local/lib/libgdal.so.29 is not a symbolic link
查看/usr/local/lib目录下有:libgdal.so.29.0.3这个文件 ,所以链接过去就好了: ln -s libgdal.so.29.0.3 libgdal.so.29
再次调用ogr2ogr命令会报错,这个错误是由于proj是直接安装的libproj-dev导致的: