繁体   English   中英

Node - 将 Node Express 连接到在 Docker 容器中运行的 Postgres

[英]Node - Connect Node Express to Postgres Running In Docker Container

我有一个使用 Express 运行的 Node 项目。

我有一个 docker-compose.yml 文件,其中包含定义的 Postgres 数据库 -

version: '3.8'

services:
  db:
    container_name: db
    image: 'postgres:12'
    ports:
      - 5432:5432
    environment:
      - POSTGRES_USER=test
      - POSTGRES_PASSWORD=12345
      - POSTGRES_DB=testdb
    volumes:
      - pgdata1:/var/lib/postgresql/data
volumes:
  pgdata1: {}

我不想在 docker 容器中运行我的 Node Express 服务器,但我确实希望它能够连接到 docker 容器中的 Postgres 数据库。 我在 Mac 上运行它。 当我在本地启动我的 Node Express 服务器,使用 Sequelize 连接到 Postgres 数据库时,我不成功。 有没有办法在不将我的 Node Express 服务器放入 Docker 容器中并且不对我的本地 IP 地址进行硬编码的情况下做到这一点?

下面的 server.js 文件 -

import * as express from "express";
import { sequelize } from "./util/database";

const PORT = process.env.STAGE === "local" ? 8080 : 80;
const HOST = "0.0.0.0";

const app = express();

app.get("/", (req: any, res: any) => {
  res.status(200).send("hello world!");
});

app.get("/ping", (req: any, res: any) => {
  res.status(200).send("pong");
});

app.get("/healthy", (req: any, res: any) => {
  res.status(200).send("healthy");
});

const start = async () => {
  try {
    await sequelize.sync({ force: true });

    app.listen(PORT, HOST);

    console.log(`Running on http://${HOST}:${PORT}`);
  } catch (error) {
    console.log(error);
  }
};

start();

utils/database.ts 文件如下 -

import { Sequelize } from "sequelize-typescript";

export const sequelize = new Sequelize({
  database: process.env.PGDATABASE,
  username: process.env.PGUSER,
  password: process.env.PGPASSWORD,
  host: process.env.PGHOST,
  dialect: "postgres",
  models: [],
});

我删除了模型数组中的模型,因为这与我的问题无关。

我首先运行docker compose build然后运行docker compose up -d db然后yarn start

在您的应用程序中,您必须连接到 127.0.0.1 (localhost)。

使用 0.0.0.0 只是为了在所有可用 IP 上打开一个监听端口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM