首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将契约代理连接到PostgreSQL的本地或云实例?

如何将契约代理连接到PostgreSQL的本地或云实例?
EN

Stack Overflow用户
提问于 2021-06-13 10:13:56
回答 1查看 482关注 0票数 0

我很难让container在码头容器中运行,以连接到我在Windows上的本地PostgreSQL安装。

这就是我的码头运行命令.

代码语言:javascript
复制
docker run pactfoundation/pact-broker 
-e PACT_BROKER_DATABASE_USERNAME=pact_broker 
-e PACT_BROKER_DATABASE_PASSWORD={Password} 
-e PACT_BROKER_DATABASE_HOST=host.docker.internal 
-e PACT_BROKER_DATABASE_NAME=pact_broker 
-e PACT_BROKER_DATABASE_PORT=5432 
-p 9292:9292

返回以下错误..。

代码语言:javascript
复制
Unable to load application: Sequel::DatabaseConnectionError: PG::ConnectionBad: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
bundler: failed to load command: puma (/pact_broker/vendor/bundle/ruby/2.6.0/bin/puma)
Sequel::DatabaseConnectionError: PG::ConnectionBad: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

这是pgAdmin 4中的数据库和用户

下面是我用来测试连接的命令

代码语言:javascript
复制
psql postgresql://pact_broker:{Password}@localhost/pact_broker

返回以下内容..。

代码语言:javascript
复制
psql (13.3)
WARNING: Console code page (65001) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
Type "help" for help.

pact_broker=>

我还尝试运行以下命令,该命令返回相同的错误

代码语言:javascript
复制
docker run pactfoundation/pact-broker -e PACT_BROKER_DATABASE_URL=postgresql://pact_broker:{Password}@host.docker.internal/pact_broker -p 9292:9292

我的postgres.conf文件包含listen_addresses = '*',我的pg_hba.conf包含以下内容

代码语言:javascript
复制
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     scram-sha-256
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     scram-sha-256
host    all             all             0.0.0.0/0               trust
host    replication     all             ::1/128                 scram-sha-256
host    all             all             ::/0                    md5

使用托管的实例也有类似的问题

我的连接字符串看起来如下..。

代码语言:javascript
复制
psql "host=pactbrokerserver.postgres.database.azure.com port=5432 dbname={your_database} user=postgres@pactbrokerserver password={your_password} sslmode=require"

我试图通过当地的契约经纪人连接到.

代码语言:javascript
复制
docker run pactfoundation/pact-broker 
-e PACT_BROKER_DATABASE_USERNAME=postgres@pactbrokerserver 
-e PACT_BROKER_DATABASE_PASSWORD={Password} 
-e PACT_BROKER_DATABASE_HOST=pactbrokerserver.postgres.database.azure.com 
-e PACT_BROKER_DATABASE_NAME=pactbroker 
-e PACT_BROKER_DATABASE_PORT=5432 
-e PACT_BROKER_DATABASE_CONNECT_MAX_RETRIES=5 
-p 9292:9292

它会返回完全相同的错误。

这里有什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-13 10:42:28

我认为这里发生的事情是,您已经将容器名称放在了环境参数列表之前,放到了docker run命令中。

因此,不使用自定义值为正在运行的容器设置PACT_BROKER_DATABASE_NAME和其他环境变量,它们只是被运行时丢弃。

试一试:

代码语言:javascript
复制
docker run -e PACT_BROKER_DATABASE_USERNAME=pact_broker \
-e PACT_BROKER_DATABASE_PASSWORD={Password} \
-e PACT_BROKER_DATABASE_HOST=host.docker.internal \
-e PACT_BROKER_DATABASE_NAME=pact_broker \
-e PACT_BROKER_DATABASE_PORT=5432 \
-p 9292:9292 \
pactfoundation/pact-broker 

调试选项

如果我错了,这个问题很可能与网络路径有关。为了排除这种情况,我们可以通过用/bin/sh替换入口点(通常是启动和运行web服务器的脚本),将一个shell放到码头容器中。

代码语言:javascript
复制
docker run -it --entrypoint /bin/sh --user root -e PACT_BROKER_DATABASE_USERNAME=pact_broker -e PACT_BROKER_DATABASE_PASSWORD=Penwater858 -e PACT_BROKER_DATABASE_HOST=host.docker.internal -e PACT_BROKER_DATABASE_NAME=pact_broker -e PACT_BROKER_DATABASE_PORT=5432 -p 9292:9292 pactfoundation/pact-broker
# once in the container...
apk update
apk add busybox-extras
# see if there is a network path
telnet $PACT_BROKER_DATABASE_HOST $PACT_BROKER_DATABASE_PORT
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67957118

复制
相关文章

相似问题

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