应用容器未正确连接到部署中的Postgres数据库

时间:2020-06-11 15:44:03

标签: postgresql docker docker-compose sequelize.js nestjs

TLDR:带有PostgreSQL数据库和sequelize-typescript ORM的NestJs服务器正在开发中(通过在Mac上运行的npm和postgres数据库在本地启动),但在通过docker-compose进行容器化构建和部署时则不会。

到目前为止,我已经在我的database.provider.ts中解决了问题,通过sequelize-typescript与数据库建立了连接:

export const databaseProviders = [
{
    provide: 'SEQUELIZE',
    useFactory: async (configService: ConfigService) => {
        const sequelize = new Sequelize(configService.sequelizeOrmConfig);
        sequelize.addModels([
            Model1,
            Model2,
            Model3,
        ]);
        await sequelize.sync();
        return sequelize;
    },
    inject: [ConfigService],
},];

应用程序容器正在启动:await sequelize.sync(); 从那里开始,该应用程序无法进一步启动,因此我想某些东西正在阻止与数据库的连接。当我将这一部分注释掉时,该应用程序正在启动(但是当然没有数据库连接)。当我在开发中本地运行时,它也可以工作。

也许我的docker-compose.yml也与此有关:

version: '3.5'

services:
  testname_app:
    container_name: testname_app
    image: registry.acme.com/test/test 
    env_file:
      - .env
    depends_on:
      - postgres
    links:
      - postgres:postgres
    networks:
      - testname-network
    restart: unless-stopped

  postgres:
    container_name: postgres
    image: postgres
    env_file: .env
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - testname-network
    restart: unless-stopped

networks:
  testname-network:
    driver: bridge

volumes:
  pgdata:

1 个答案:

答案 0 :(得分:0)

通过在我的Dockerfile中从FROM node:latest切换到FROM node:lts来解决此问题。给我自己的便笺:永远不要从最新中撤出。