端口 5432 失败:服务器意外关闭了连接

port 5432 failed: server closed the connection unexpectedly

提问人:Kiran Kumawat 提问时间:10/6/2023 更新时间:10/6/2023 访问量:145

问:

在版本下方

  • 乌班图22.04
  • 轨道 5.2.6
  • 红宝石 2.6.10
  • PostgreSQL 14的

在 docker 容器中运行 postgresql 并在运行 rake db:migrate 等任何命令或尝试连接 psql -h 127.0.0.1 -U user 或 rake db:create 时出现以下错误

PG::ConnectionBad: connection to server at "127.0.0.1", port 5432 failed: server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

当我尝试在本地运行 PostgreSQL 时出现以下错误

psql: error: connection to server at "localhost" (127.0.0.1), port 5432 failed: could not initiate GSSAPI security context: Unspecified GSS failure.  Minor code may provide more information: Server not found in Kerberos database
connection to server at "localhost" (127.0.0.1), port 5432 failed: FATAL:  database "DATABSE" does not exist
PostgreSQL 码头工人 ruby-on-rails-5

评论

0赞 tadman 10/6/2023
我会检查你的Postgres服务器是如何设置为授权外部连接的,并验证你是否可以像深入研究Rails之前一样使用一个简单的工具进行连接。psql
0赞 Kiran Kumawat 10/6/2023
我使用了psql -h localhost -U postgres,但遇到了与GSSAPI相关的错误
1赞 tadman 10/6/2023
检查您的或等效项,看看是否设置正确。pg_hba.conf
1赞 richyen 10/6/2023
FATAL: database "DATABSE" does not exist-- 您的连接字符串(user、host、dbname、port)是什么?
0赞 Laurenz Albe 10/6/2023
第二个错误是显而易见的。关于第一个:您是否没有阅读有关此的大量其他问题以及反复出现的评论,即您最好查看 PostgreSQL 服务器日志以获取更多详细信息?
0赞 Kiran Kumawat 10/6/2023
@richyen我使用的是 user,db_name并移植我在 docker-compose.yml 文件中提到的内容,主机 127.0.0.1。当我在容器内并尝试使用 -d template1 执行 psql 时,它可以工作,但来自本地计算机 psql 的容器外部不起作用。

答:

0赞 Rakesh Bakoriya 10/6/2023 #1

rake db:migrate 不直接在 docker 容器中运行

有 2 种方法可以运行它

1)第一个

首先,在 docker-entrypoint.sh 文件中添加以下行

echo $SHARED_DIR
bundle exec rake db:setup  DISABLE_DATABASE_ENVIRONMENT_CHECK=1
bundle exec rake db:migrate  DISABLE_DATABASE_ENVIRONMENT_CHECK=1

echo $SHARED_DIR
bundle exec rake db:setup 
bundle exec rake db:migrate

请记住,当您第一次创建 Docker 映像时,rake db:setup 命令只需运行一次,之后每当您创建新映像时,请注释 rake db:setup 命令。 否则,数据库将被重置,您将丢失数据。

2)另一种方式。

您可以在本地转到您的项目并运行此命令

为此,您必须运行 sudo docker ps -a 命令才能查看所有 docker 映像

之后,运行转到位置 sudo docker exec -ti container_id bash 命令

然后

bundle rake db:setup 
bundle rake db:migrate

评论

0赞 Kiran Kumawat 10/6/2023
谢谢 Rakesh,但我不是试图在容器内运行 rake db:migrate,而是从外部尝试。