如果想在docker中同时部署geoserver和postgis,可以采用官方镜像Docker Hub
kartoza/postgis
1、新建一个工作目录,比如d:\project
2、新建一个docker-compose.yml配置文件,内容如下:
version: '3.9'
volumes:
geoserver-data:
geo-db-data:
services:
db:
image: kartoza/postgis:14-3.1
volumes:
- geo-db-data:/var/lib/postgresql
ports:
- 32767:5432
environment:
- POSTGRES_DB=gis
- POSTGRES_USER=docker
- POSTGRES_PASS=docker
- ALLOW_IP_RANGE=0.0.0.0/0
restart: on-failure
healthcheck:
test: "exit 0"
geoserver:
image: kartoza/geoserver:2.20.1
volumes:
- geoserver-data:/opt/geoserver/data_dir
ports:
- 8600:8080
restart: on-failure
environment:
- GEOSERVER_DATA_DIR=/opt/geoserver/data_dir
- GEOSERVER_ADMIN_PASSWORD=123456
- GEOSERVER_ADMIN_USER=admin
depends_on:
db:
condition: service_healthy
healthcheck:
test: curl --fail -s http://localhost:8080/ || exit 1
interval: 1m30s
timeout: 10s
retries: 3
3、在命令行中执行 docker-compose up 即可完成geoserver+postgis的docker部署
4、在浏览器中输入 http://127.0.0.1:8600/geoserver可进入管理界面,输入用户admin及密码123456
5、配置postgis数据源, 需要注意host:db, port:5432,database:gis ,用户:docker ,密码:docker
6、如果是外部程序需要访问postgis则host为本机ip,port为32767即对外映射的端口
7、如果要显示图层的标注, 需要增加一种样式,并将其与图层绑定,注意样式文件中 <ogc:PropertyName>label</ogc:PropertyName> "label"是需要显示的字段名
<?xml version="1.0" encoding="GB2312"?>
<StyledLayerDescriptor version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
xmlns="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NamedLayer>
<Name>LABEL_LINE</Name>
<UserStyle>
<FeatureTypeStyle>
<Rule>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#0000FF</CssParameter>
</Stroke>
</LineSymbolizer>
<TextSymbolizer>
<Label>
<ogc:PropertyName>label</ogc:PropertyName>
</Label>
<Font>
<CssParameter name="font-family">微软雅黑</CssParameter>
<CssParameter name="font-size">12</CssParameter>
<CssParameter name="font-style">normal</CssParameter>
<CssParameter name="font-weight">normal</CssParameter>
</Font>
<VendorOption name="followLine">true</VendorOption>
</TextSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>