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]随时重启,input
rs
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 | 日志:自动清理启动器
到您的服务node
的Docker-compose
添加link
configuration选项指向服务postgres
,如下所示:
node: links: - postgres
然后你可以通过名字服务postgres连接到postgresdb
点