繁体   English   中英

服务器和 postgresql 在 Docker `getaddrinfo ENOTFOUND` 上运行时无法连接

[英]server and postgresql cannot connect when both running on Docker `getaddrinfo ENOTFOUND`

使用 docker compose 文件(如下)创建 docker 容器后,我调用

$ docker run myApp

但是,我得到

Error: getaddrinfo ENOTFOUND main_db

这仅在服务器和 postgresql 都在 docker 容器中时发生(我能够连接到本地主机上的 postgresql)

我正在使用 TypeOrm 运行 NestJS 应用程序以连接到 postgresql 服务器

在它启动连接的app.module.ts内,我的配置应该与我的 docker postgresql 配置相匹配。 host指向我在main_db上创建的容器,我将其声明为我的服务器( main服务)的依赖项。 一切都应该在同一个网络webnet 。:

TypeOrmModule.forRoot({
      type: 'postgres', 
      host: 'main_db',
      port: +process.env.POSTGRES_PORT,
      username: process.env.POSTGRES_USER,
      password: process.env.POSTGRES_PASSWORD,
      database: process.env.POSTGRES_DB,
      autoLoadEntities: true,
      synchronize: true,
      logging: dbLogging,
    }),

docker-compose.yml

version: '3.7'

services:
  main:
    container_name: main
    build:
      context: .
      target: development
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    ports:
      - ${SERVER_PORT}:${SERVER_PORT}
      - 9229:9229
    command: npm run start:dev
    env_file:
      - .env
    networks:
      - webnet
    depends_on:
      - main_db
  main_db:
    container_name: main_db
    image: postgres:12
    restart: always
    networks:
      - webnet
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_USER: ${POSTGRES_USER}
      PG_DATA: /var/lib/postgresql/data
    ports:
      - '${POSTGRES_PORT}:${POSTGRES_PORT}'
    volumes:
      - pgdata:/var/lib/postgresql/data
networks:
  webnet:
volumes:
  pgdata:

.env文件

POSTGRES_PORT=5432
POSTGRES_USER=test
POSTGRES_PASSWORD=test
POSTGRES_DB=test
SERVER_PORT=3001

当创建一个Dockerfile和一个Dockerfile docker-compose.yml文件并且你为在Dockerfile定义的应用程序调用docker-compose.yml docker run myApp而不是调用Dockerfile docker-compose up ,你会看到应用程序正在运行; 但是,它不会启动docker-compose文件中定义的容器。 在 NestJS 服务器的情况下,它正在运行服务器,但找不到带有数据库的容器,因为这个容器没有被启动。 虽然在应用程序设置之间的区别Dockerfile ,并在容器的定义docker-compose.yml是明确的,我不知道该docker命令并没有提及该docker-compose.yml 因此,在这里发布以防其他人有类似的困惑。

暂无
暂无

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

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