【发布时间】:2022-01-05 19:19:02
【问题描述】:
我按照这些步骤设置了 QWC 服务https://github.com/qwc-services/qwc-services-core#quick-start,我可以运行演示了。但是如果加载我自己的 QGIS 项目,我会收到以下错误消息:
qwc-qgis-server_1 | 07:50:07 WARNING Server[99]: <ServerException>Layer(s) not valid</ServerException>
qwc-qgis-server_1 |
qwc-qgis-server_1 | 07:50:07 WARNING ClearCapabilities[99]: Cached cleared : /data/MeasurementDemo.qgs
qwc-qgis-server_1 | 07:50:07 WARNING PostGIS[99]: Connection to database failed
qwc-qgis-server_1 | could not connect to server: No such file or directory
qwc-qgis-server_1 | Is the server running locally and accepting
qwc-qgis-server_1 | connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
qwc-qgis-server_1 |
qwc-qgis-server_1 | 07:50:07 CRITICAL Server[99]: Error, Layer(s) measurement_b46e976f_2d0f_4bf0_942a_9d9462b40c3e not valid in project /data/MeasurementDemo.qgs
qwc-qgis-server_1 | 07:50:07 WARNING Server[99]: <ServerException>Layer(s) not valid</ServerException>
qwc-qgis-server_1 |
qwc-config-service_1 | [2022-01-04 07:50:09,360] WARNING in config_generator: Skipping theme item '': Could not get capabilities for /ows/MeasurementDemo
qwc-config-service_1 | [2022-01-04 07:50:19,468] CRITICAL in config_generator: The generation of the configuration files resulted in a failure
qwc-config-service_1 | [2022-01-04 07:50:19,468] CRITICAL in config_generator: The configuration files were not updated!
qwc-config-service_1 | [2022-01-04 07:50:20,856] CRITICAL in config_generator: The generation of the permission files resulted in a failure.
qwc-config-service_1 | [2022-01-04 07:50:20,857] CRITICAL in config_generator: The permission files were not updated!
qwc-config-service_1 | [pid: 15|app: 0|req: 18/18] 172.18.0.11 () {30 vars in 408 bytes} [Tue Jan 4 07:50:05 2022] POST /generate_configs?tenant=default => generated 2881 bytes in 15083 msecs (HTTP/1.1 200) 2 headers in 81 bytes (1 switches on core 0)
由于错误与此问题非常相似:PostgreSQL: Why psql can't connect to server?,我按照答案进行操作,但没有结果。
ps -ef | grep postgres 给我以下结果:
postgres 203911 1 0 07:35 ? 00:00:00 /usr/lib/postgresql/13/bin/postgres -D /var/lib/postgresql/13/main -c config_file=/etc/postgresql/13/main/postgresql.conf
我也找到了插座
/var/run/postgresql/.s.PGSQL.5432
然后我运行命令
psql -h /var/run/postgresql/ GeoDB
但没有结果。之后我检查了ph_hba.conf 文件:
# "local" is for Unix domain socket connections only
local all all peer
运行命令pg_lsclusters 给我:
Ver Cluster Port Status Owner Data directory Log file
13 main 5432 online postgres /var/lib/postgresql/13/main /var/log/postgresql/postgresql-13-main.log
同样在重启 pg_ctlcluster 和 PostgreSQL 后,错误依旧。
编辑 1
在 cnaimi 的回答之后,我检查了postgresql.confFile:
# - Connection Settings -
#listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432 # (change requires restart)
max_connections = 100 # (change requires restart)
#superuser_reserved_connections = 3 # (change requires restart)
unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories
# (change requires restart)
#unix_socket_group = '*' # (change requires restart)
#unix_socket_permissions = 0777 # begin with 0 to use octal notation
# (change requires restart)
#bonjour = off # advertise server via Bonjour
# (change requires restart)
#bonjour_name = '' # defaults to the computer name
# (change requires restart)
但我找不到错误,因为端口是 5432 并且它侦听所有地址。
编辑 2
在搜索过程中,我发现了几个pg_service.conf 文件:
./qwc-services/qwc-docker/wsgi-service/pg_service.conf
./qwc-services/qwc-docker/qgis-server/pg_service.conf
./qwc-services/qwc-docker/postgis/pg_service.conf
./qwc-services/qwc-docker/pg_service.conf
每一个都包含一个或多个数据库凭据,如下所示:
[qwc_geodb]
host=qwc-postgis
port=5432
dbname=qwc_demo
user=qwc_service
password=qwc_service
sslmode=disable
据我所知,所有文件中的端口都是正确的。但是当然数据库名称和用户/密码是错误的。这会导致错误吗?还是 QWS 通过 .qgs 文件获取凭据?
编辑 3
感谢 Devdatta Tengshe 的提示,我将 PostgreSQL 的主机设置为 127.0.0.1。通过sudo docker-compose ps 可以看到使用的容器及其端口:
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------------------
qwc-docker_qwc-admin-gui_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5031->9090/tcp
qwc-docker_qwc-api-gateway_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8088->80/tcp,:::8088->80/tcp
qwc-docker_qwc-auth-service_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5017->9090/tcp
qwc-docker_qwc-config-service_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5010->9090/tcp
qwc-docker_qwc-data-service_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5012->9090/tcp
qwc-docker_qwc-elevation-service_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5002->9090/tcp
qwc-docker_qwc-fulltext-search-service_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5011->9090/tcp
qwc-docker_qwc-map-viewer_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5030->9090/tcp
qwc-docker_qwc-mapinfo-service_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5016->9090/tcp
qwc-docker_qwc-ogc-service_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5013->9090/tcp
qwc-docker_qwc-permalink-service_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5001->9090/tcp
qwc-docker_qwc-postgis_1 docker-entrypoint.sh postgres Up (healthy) 127.0.0.1:5439->5432/tcp
qwc-docker_qwc-qgis-server_1 /sbin/my_init Up 127.0.0.1:8001->80/tcp
qwc-docker_qwc-solr_1 docker-entrypoint.sh solr- ... Up 127.0.0.1:8983->8983/tcp
【问题讨论】:
-
Postgres 服务器在哪里运行?是在主机上吗?还是在 docker 容器中运行?此外,看起来 qgs 文件正在寻找在 localhost 上运行的 Postgres,但它无法连接,因为该 docker 容器内没有运行 postgres。
-
感谢@DevdattaTengshe 的提示,这是真的,我没有在 docker 中安装 Postgres。我是否必须使用
$ docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres将其安装在 docker 内?那么它是否适用于所有 docker 容器? -
可以创建gqs文件,使用127.0.0.1作为Postgres主机;然后像这样运行这个 docker 容器:stackoverflow.com/questions/24319662/…
-
感谢您提供此信息,我在将主机设置为 127.0.0.1 时编辑了我的问题,但如果我尝试按照您链接中的答案进行操作,我不确定哪个容器(或全部?)我应该改变我的理解,所有人都已经在使用端口 127.0.0.1。抱歉,我是 docker 新手,对此没有太多经验。
标签: postgresql postgis