Node Postgres Docker

时间:2017-10-10 12:18:49

标签: node.js postgresql docker sequelize.js

我尝试使用我的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文件中,我声明了 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:connect ECONNREFUSED 172.18.0.2:5431

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

所有泊坞日志:

  

警告:已构建服务节点的映像,因为它尚不存在。要重建此图片,您必须使用docker-compose builddocker-compose up --build

     

创建graphqlpostgrestemplate_postgres_1 ...

     

创建graphqlpostgrestemplate_postgres_1 ...已完成

     

创建graphqlpostgrestemplate_node_1 ...

     

创建graphqlpostgrestemplate_node_1 ...已完成

     

附加到graphqlpostgrestemplate_postgres_1,graphqlpostgrestemplate_node_1

     

postgres_1 |属于该数据库系统的文件将由用户" postgres"。

拥有      

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

     

postgres_1 |

     

postgres_1 |数据库集群将使用locale" en_US.utf8"进行初始化。

     

postgres_1 |因此,默认数据库编码已设置为" UTF8"。

     

postgres_1 |默认文本搜索配置将设置为" english"。

     

postgres_1 |

     

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

     

postgres_1 |

     

postgres_1 |修复现有目录/ var / lib / postgresql / data ... ok

的权限      

postgres_1 |创建子目录......好的

     

postgres_1 |选择默认的max_connections ... 100

     

postgres_1 |选择默认的shared_buffers ... 128MB

     

postgres_1 |选择动态共享内存实现... posix

     

postgres_1 |创建配置文件......好的

     

postgres_1 |在/ var / lib / postgresql / data / base / 1 ... ok

中创建template1数据库      

postgres_1 |初始化pg_authid ...确定

     

postgres_1 |初始化依赖...好的

     

postgres_1 |创建系统视图......好的

     

node_1 | npm info如果以ok结尾

就可以了      

node_1 | npm info使用npm@5.3.0

     

node_1 | npm info使用node@v8.6.0

     

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

     

node_1 | npm info lifecycle graphql-postgres-template@1.0.0~prestart:graphql-postgres-template@1.0.0

     

node_1 | npm info lifecycle 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 |创建校对......好吧

     

postgres_1 |创建转换......好的

     

postgres_1 |创建词典......好的

     

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

     

postgres_1 |创建信息架构......好的

     

postgres_1 |加载PL / pgSQL服务器端语言......确定

     

node_1 | [nodemon] 1.12.1

     

node_1 | [nodemon]随时重启,输入rs

     

node_1 | [nodemon]正在观看:

     

node_1 | [nodemon]从babel-node index.js

开始      

postgres_1 |吸尘数据库模板1 ...确定

     

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 |警告:启用"信任"本地连接的身份验证

     

postgres_1 |您可以通过编辑pg_hba.conf或使用选项-A或

来更改此设置      

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

     

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

     

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

     

postgres_1 |这将允许任何有权访问

的人      

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

     

postgres_1 | Docker的默认配置,这是

     

postgres_1 |实际上是同一个

上的任何其他容器      

postgres_1 |系统

     

postgres_1 |

     

postgres_1 |使用" -e POSTGRES_PASSWORD =密码"设置

     

postgres_1 |它在" docker run"。

     

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

     

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

     

postgres_1 |提示:另一位邮局管理员是否已在5432端口上运行?如果没有,请等待几秒钟然后重试。

     

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

     

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

     

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

     

postgres_1 |日志:autovacuum启动器启动

     

postgres_1 |完成

     

postgres_1 |服务器已启动

     

postgres_1 |改变角色

     

postgres_1 |

     

postgres_1 |

     

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

     

postgres_1 |

     

postgres_1 |等待服务器关闭....日志:收到快速关机请求

     

postgres_1 |日志:中止任何活动的交易

     

postgres_1 |日志:autovacuum发射器关闭

     

postgres_1 |日志:关闭

     

postgres_1 |日志:数据库系统关闭

     

node_1 | 2017年10月10日星期二12:17:16 GMT sequelize不推荐使用基于字符串的运算符现已弃用。请使用基于符号的运算符以获得更好的安全性,请在http://docs.sequelizejs.com/manual/tutorial/querying.html#operators处的node_modules / sequelize / lib / sequelize.js阅读更多内容:236:13

     

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

     

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

     

node_1 | 2017年10月10日星期二12:17:17 GMT身体解析器弃用未定义扩展:在index.js提供扩展选项:53:30

     

node_1 |未处理拒绝SequelizeConnectionRefusedError:connect ECONNREFUSED 172.18.0.2:5431

     

node_1 | at 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 |在Socket。 (/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 | at _combinedTickCallback(internal / process / next_tick.js:138:11)

     

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

     

node_1 | [nodemon] clean exit - 在重新启动之前等待更改

     

postgres_1 |完成

     

postgres_1 |服务器已停止

     

postgres_1 |

     

postgres_1 | PostgreSQL init进程完成;准备好开始了。

     

postgres_1 |

     

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

     

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

     

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

     

postgres_1 |日志:autovacuum启动器启动

1 个答案:

答案 0 :(得分:1)

在您的服务Docker-composelink添加node配置选项指向服务postgres,如下所示:

node:
  links:
    - postgres

然后,您可以使用名称服务 postgres

连接到postgresdb