Node Postgres Docker

我尝试使用node.js应用程序来设置Docker,该应用程序使用sequelize连接到postgres。

const sequelize = new Sequelize( process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, { host: process.env.DB_HOST, port: process.env.DB_PORT, dialect: 'postgres', }, ); 

在我的.env文件中,我声明了所有其他环境variables中的DB_HOST=postgres (这是在docker-conpose.yml中声明的服务的名称)和DB_PORT=5432

我的Dockerfile如下所示:

 FROM node:8.6.0 # Working directory for application WORKDIR /usr/src/app EXPOSE 8080 COPY . /usr/src/app # In this file I create a user and a DB and give him the privlages ADD init.sql /docker-entrypoint-initdb.d/ RUN npm install 

而我docker-compose.yml看起来如下:

 version: "2" services: postgres: image: "postgres:9.4" restart: always ports: - "5432:5432" env_file: - .env node: build: . ports: - "8080:8080" depends_on: - postgres command: ["npm", "start"] 

当我docker-compose up我得到了Sequelize无法连接到数据库的错误。

未处理的拒绝SequelizeConnectionRefusedError:连接ECONNREFUSED 172.18.0.2:5431

有人可以帮我解决这个错误吗?

所有docker日志:

警告:服务节点的图像是由于它不存在而构build的。 要重build这个图片,你必须使用docker-compose build或者docker-compose up --build

创buildgraphqlpostgrestemplate_postgres_1 …

创buildgraphqlpostgrestemplate_postgres_1 …完成

创buildgraphqlpostgrestemplate_node_1 …

创buildgraphqlpostgrestemplate_node_1 …完成

附加到graphqlpostgrestemplate_postgres_1,graphqlpostgrestemplate_node_1

postgres_1 | 属于这个数据库系统的文件将由用户“postgres”拥有。

postgres_1 | 该用户还必须拥有服务器进程。

postgres_1 |

postgres_1 | 数据库集群将使用语言环境“en_US.utf8”进行初始化。

postgres_1 | 默认的数据库编码相应地被设置为“UTF8”。

postgres_1 | 默认的文本searchconfiguration将被设置为“英文”。

postgres_1 |

postgres_1 | 数据页校验和被禁用。

postgres_1 |

postgres_1 | 修复现有目录/ var / lib / postgresql / data …的权限

postgres_1 | 创build子目录…好的

postgres_1 | select默认的max_connections … 100

postgres_1 | select默认的shared_buffers … 128MB

postgres_1 | selectdynamic共享内存实现… posix

postgres_1 | 创buildconfiguration文件…好的

postgres_1 | 在/ var / lib / postgresql / data / base / 1中创buildtemplate1数据库

postgres_1 | 初始化pg_authid …好的

postgres_1 | 初始化依赖关系…好吧

postgres_1 | 创build系统视图…好吧

node_1 | 如果它结束与确定,npm信息它工作

node_1 | npm信息使用npm@5.3.0

node_1 | npm信息使用node@v8.6.0

postgres_1 | 加载系统对象的描述…好的

node_1 | npm info生命周期graphql-postgres-template@1.0.0~prestart:graphql-postgres-template@1.0.0

node_1 | npm info生命周期graphql-postgres-template@1.0.0~start:graphql-postgres-template@1.0.0

node_1 |

node_1 | > graphql-postgres-template@1.0.0 start / usr / src / app

node_1 | > nodemon –exec babel-node index.js

node_1 |

postgres_1 | 创buildsorting规则…好的

postgres_1 | 创造转换…好的

postgres_1 | 创造词典…好的

postgres_1 | 设置内置对象的权限…好的

postgres_1 | 创build信息模式…好的

postgres_1 | 加载PL / pgSQL服务器端语言…好的

node_1 | [nodemon] 1.12.1

node_1 | [nodemon]随时重启,inputrs

node_1 | 看:

node_1 | [nodemon]启动babel-node index.js

postgres_1 | 吸尘数据库template1 …好的

postgres_1 | 将template1复制到template0 …好的

postgres_1 | 复制template1到postgres …好的

postgres_1 | 将数据同步到磁盘…好的

postgres_1 |

postgres_1 | 成功。 现在可以使用以下命令启动数据库服务器

postgres_1 |

postgres_1 | postgres -D / var / lib / postgresql / data

postgres_1 | 要么

postgres_1 | pg_ctl -D / var / lib / postgresql / data -l logfile start

postgres_1 |

postgres_1 |

postgres_1 | 警告:启用本地连接的“信任”身份validation

postgres_1 | 你可以通过编辑pg_hba.conf或者使用选项-A或者来改变它

postgres_1 | –auth-local和–auth-host,下一次运行initdb。

postgres_1 | ************************************************** **

postgres_1 | 警告:没有为数据库设置密码。

postgres_1 | 这将允许任何人访问的

postgres_1 | Postgres端口来访问你的数据库。 在

postgres_1 | 泊坞窗的默认configuration,这是

postgres_1 | 有效的任何其他容器在同一个

postgres_1 | 系统。

postgres_1 |

postgres_1 | 使用“-e POSTGRES_PASSWORD =密码”进行设置

postgres_1 | 它在“docker运行”。

postgres_1 | ************************************************** **

postgres_1 | 等待服务器启动….日志:无法绑定IPv6套接字:无法分配请求的地址

postgres_1 | 提示:另一位邮差pipe理员已经在端口5432上运行了吗? 如果没有,等待几秒钟,然后重试。

postgres_1 | 日志:数据库系统在2017-10-10 12:17:15 UTCclosures

postgres_1 | 日志:现在启用MultiXact成员环绕保护

postgres_1 | 日志:数据库系统已准备好接受连接

postgres_1 | 日志:自动清理启动器

postgres_1 | DONE

postgres_1 | 服务器启动

postgres_1 | 改变angular色

postgres_1 |

postgres_1 |

postgres_1 | /usr/local/bin/docker-entrypoint.sh:忽略/docker-entrypoint-initdb.d/*

postgres_1 |

postgres_1 | 等待服务器closures…. LOG:收到快速关机请求

postgres_1 | 日志:中止任何活动的事务

postgres_1 | 日志:closures自动清理发射器

postgres_1 | 日志:closures

postgres_1 | 日志:数据库系统被closures

node_1 | 星期二,10十月2017 12:17:16 GMT sequelize deprecated基于string的操作符现在已被弃用。 请使用基于符号的运算符以获得更好的安全性,请阅读http://docs.sequelizejs.com/manual/tutorial/querying.html#operators上的node_modules / sequelize / lib / sequelize.js:236:13

node_1 | 警告:configuration目录中找不到configuration:/ usr / src / app / config

node_1 | 警告:要禁用此警告,请在环境中设置SUPPRESS_NO_CONFIG_WARNING。

node_1 | 2017年10月10日星期二12:17:17 GMT body-parser deprecated undefined extended:在index.js提供扩展选项:53:30

node_1 | 未处理的拒绝SequelizeConnectionRefusedError:连接ECONNREFUSED 172.18.0.2:5431

node_1 | 在connection.connect.err(/usr/src/app/node_modules/sequelize/lib/dialects/postgres/connection-manager.js:96:24)

node_1 | 在Connection.connectingErrorHandler(/usr/src/app/node_modules/pg/lib/client.js:123:14)

node_1 | 在emitOne(events.js:115:13)

node_1 | 在Connection.emit(events.js:210:7)

node_1 | 在sockets。 (/usr/src/app/node_modules/pg/lib/connection.js:71:10)

node_1 | 在emitOne(events.js:115:13)

node_1 | 在Socket.emit(events.js:210:7)

node_1 | 在emitErrorNT(internal / streams / destroy.js:64:8)

node_1 | 在_combinedTickCallback(内部/进程/ next_tick.js:138:11)

node_1 | at process._tickDomainCallback(internal / process / next_tick.js:218:9)

node_1 | [nodemon]干净退出 – 在重新启动前等待更改

postgres_1 | DONE

postgres_1 | 服务器停止

postgres_1 |

postgres_1 | PostgreSQL init进程完成; 准备启动。

postgres_1 |

postgres_1 | 日志:数据库系统在2017-10-10 12:17:16 UTCclosures

postgres_1 | 日志:现在启用MultiXact成员环绕保护

postgres_1 | 日志:数据库系统已准备好接受连接

postgres_1 | 日志:自动清理启动器

到您的服务nodeDocker-compose添加linkconfiguration选项指向服务postgres ,如下所示:

 node: links: - postgres 

然后你可以通过名字服务postgres连接到postgresdb

Interesting Posts