首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ThingsBoard Docker容器部署导致`PSQLException`

ThingsBoard Docker容器部署导致`PSQLException`
EN

Stack Overflow用户
提问于 2020-11-03 16:21:57
回答 2查看 431关注 0票数 0

我想将ThingsBoard部署为Docker容器。我使用this图像,并尝试覆盖一些环境变量以获得与外部Postgres数据库的连接。

我只需要在带有(空)数据库thingsboardlocalhost:5432上运行Postgres,我创建Docker卷mytb-datamytb-logs,然后启动:

代码语言:javascript
复制
docker run -it -p 9090:9090 -p 1883:1883 -p 5683:5683/udp -v mytb-data:/data -v mytb-logs:/var/log/thingsboard -e SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/thingsboard -e SPRING_DATASOURCE_USERNAME=postgres -e SPRING_DATASOURCE_PASSWORD=<MY_PASSWORD_HERE> --name mytb --restart=always thingsboard/tb-postgres

容器启动,但日志报告以下错误:

代码语言:javascript
复制
2020-11-03 07:55:40,480 [main] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - ERROR: relation "admin_settings" does not exist
  Position: 152
... [OMITTED]
Caused by: org.postgresql.util.PSQLException: ERROR: relation "admin_settings" does not exist
  Position: 152
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2455)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2155)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:288)
        at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:430)
        at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:356)
        at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:168)
        at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:116)
        at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52)
        at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java)
        at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57)
        ... 166 common frames omitted
pg_ctl: could not send stop signal (PID: 9): No such process

知道为什么会这样吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-28 18:21:53

在Docker启动命令中,环境变量应用引号'[...]'分隔。

这在Docker Compose中不是必需的。

对于Docker,启动

代码语言:javascript
复制
docker run -it -p 9090:9090 -p 1883:1883 -p 5683:5683/udp --name thingsboard --restart always -e SPRING_DATASOURCE_URL='<URL>' -e SPRING_DATASOURCE_USERNAME='<USERNAME>' -e SPRING_DATASOURCE_PASSWORD='<PASSWORD>' thingsboard/tb-postgres

此外,我能够使用以下配置解决这个问题(Docker Compose,类似于Docker):

代码语言:javascript
复制
thingsboard:
container_name: thingsboard
image: thingsboard/tb-postgres
restart: always
environment:
    - SPRING_DATASOURCE_URL=jdbc:postgresql://<HOSTNAME>:<PORT>/thingsboard
    - SPRING_DATASOURCE_USERNAME=<USERNAME>
    - SPRING_DATASOURCE_PASSWORD=<PASSWORD>
ports:
    - '9090:9090'
    - '1883:1883'
    - '5683:5683/udp'
票数 0
EN

Stack Overflow用户

发布于 2021-05-11 20:05:27

在mytb-data中创建一个名为db的postgres文件夹,或者如果您在另一个位置有db postgres文件夹,则在该位置执行下一步操作。我认为您在...mytb-data/db中有DB文件夹,您必须执行下一步: chown -R postgres mytbpe-data/db

因为文件夹db是与另一个用户一起创建的,并且是将使用该文件夹的postgres用户,因此您很可能会修复这个问题,我也遇到了同样的问题,因此我修复了它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64659110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档