Dockerfile如下
1
2
3
4
5
6
7
8
9
10
|
FROM postgis/postgis:13-3.1-alpine
WORKDIR /app
RUN apk --update --no-cache add python3-dev libffi-dev gcc musl-dev make libevent-dev build-base py3-pip python3 \
&&pip install wheel \
&&pip install gevent \
&&pip install --no-cache-dir flask gunicorn shapely aiohttp psycopg2 \
&&apk del python3-dev libffi-dev gcc musl-dev make libevent-dev build-base
COPY . .
EXPOSE 8848 5432
CMD gunicorn app:app -c gunicorn.conf.py
|
因为构建镜像基于alpine,遇到安装上面代码中提到的python库文件错误时解放方案来源网络
alpine安装gevent成功:
1
|
apk --update --no-cache add python3-dev libffi-dev gcc musl-dev make libevent-dev build-base
|
来源https://stackoverflow.com/a/66952652
alpine python 安装psycopg2失败的解决方案:
1
2
3
4
|
apk add --no-cache python3 postgresql-libs && \
apk add --no-cache --virtual .build-deps gcc python3-dev musl-dev postgresql-dev
pip install psycopg2 ---no-cache-dir#不缓存安装
apk --purge del .build-deps #删掉编译库
|
https://www.codenong.com/46711990/
alpine python安装shapely失败的解决方案:
1
2
3
4
5
6
7
8
9
10
11
|
apk --update add build-base libxslt-dev
apk add --virtual .build-deps \
--repository http://dl-cdn.alpinelinux.org/alpine/edge/testing \
--repository http://dl-cdn.alpinelinux.org/alpine/edge/main \
gcc libc-dev geos-dev geos && \
runDeps="$(scanelf --needed --nobanner --recursive /usr/local \
| awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
| xargs -r apk info --installed \
| sort -u)" && \
apk add --virtual .rundeps $runDeps
geos-config --cflags
|
来源:https://serverfault.com/questions/947044/installing-shapely-on-alpine-docker
alpine python 安装aiohttp失败的解决方案:
1
2
3
|
RUN apk add gcc g++ libffi-dev musl-dev \
&& python -m pip install --no-cache-dir brotlipy \
&& apk del gcc g++ libffi-dev musl-dev
|
第一步的Dockerfile和应用已经发布到github私有仓库Quer
下载该仓库,上传到服务器,解压并执行以下命令创建镜像
1
|
docker build -t ipquery:3.0 .
|
1
|
docker run -itd --name=ipquery -p 8848:8848 -p 54321:5432 -e POSTGRES_PASSWORD=password ipquery:3.0
|
具体参照http://.../archives/81/
数据库客户端Navicat连接postgis,新建数据库csgeo该名称已在代码中写死该名称已在py代码中写死,不可更改,并将数据库设置为地理空间数据库,具体方法见上面链接文章。