2017-11-11 179 views
0

我正在运行一个nodejs应用程序以及一个PostgreSQL数据库。目前,我借助以下环境变量从nodejs连接到数据库:POSTGRESQL_HOST,POSTGRESQL_USER,POSTGRESQL_PASSWORDPOSTGRESQL_PORTPOSTGRESQL_USERPOSTGRESQL_PASSWORD被映射到正确的“秘密”。端口是静态的,所以它永远不会改变。我的问题是与主机。目前,我手动输入了POSTGRESQL_HOST中的PostgreSQL窗格的IP地址,但每次实例重新部署时都会更改。连接到数据库的正确方法是什么?在Openshift中连接数据库的正确方法是什么?

回答

3

在部署配置的环境变量中设置POSTGRESQL_HOST时,请将其设置为PostgreSQL数据库服务的名称,而不是IP。该服务的名称作为内部DNS服务器中的主机名添加,并映射到适当的IP。所以当服务名称用作主机名时,事情会自动解决。

FWIW,我会亲自避免使用自动添加的环境变量。无论如何,这些名称的前缀是服务的名称(大写),因此您已经将其绑定到服务名称的知识上。最好在部署配置中使用环境变量而不是硬连线到代码中。自动添加的环境变量的另一个问题是,如果数据库是在前端之后创建的,那么它们最初不会被设置。所以最好避免它们。他们是在Docker中连接容器的遗产,他们从来就不是一种很好的做事方式。

0

如果您从吊舱的终端检查您的环境,请拨打printenv,您应该看到automatically added variables。因此,假设您的Postgres服务被称为POSTGRES,则可以使用环境变量POSTGRES_SERVICE_HOST来访问您的数据库。

+0

在这种情况下,我需要在我的nodejs应用程序代码中拥有'POSTGRES_SERVICE_HOST',而不是原来的'POSTGRESQL_HOST'吧?你知道是否可以将一个环境变量的值设置为另一个?例如,'POSTGRESQL_HOST' ='$ POSTGRES_SERVICE_HOST'? – pranavashok

+0

如果你想继续使用'POSTGRESQL_HOST',Graham的答案是正确的选择。 –

相关问题