【问题标题】:Docker compose error to connect postgres database with Node APIDocker 撰写错误以将 postgres 数据库与 Node API 连接
【发布时间】:2020-10-06 12:03:03
【问题描述】:

当我尝试通过 Node 中的 API 访问 postgres 数据库时,我遇到了与 docker-composer 的连接错误。

我使用 Sequelize 作为 ORM 来访问数据库。但我不知道发生了什么。

docker-compose.yml

version: '3.5'

services:
  api-service:
    build:
      context: .
      dockerfile: ./api-docker.dockerfile
    image: api-service
    container_name: api-service
    restart: always
    env_file: .env
    environment:
      - NODE_ENV=$NODE_ENV
    ports:
      - ${PORT}:3000
    volumes:
      - .:/home/node/api
      - node_modules:/home/node/api/node_modules
    depends_on:
      - postgres-db
    networks:
      - api-network
    command: npm run start:dev 

  postgres-db:
    expose:
      - ${PORT_SERVICE}
    ports:
      - ${PORT_SERVICE}:5432
    restart: always
    env_file: .env
    volumes:
      - pgReportData:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: ${USER_SERVICE}
      POSTGRES_PASSWORD: ${PASSWORD_SERVICE}
      POSTGRES_DB: ${DATABASE_SERVICE}
    networks:
      - api-network
    container_name: postgres-db
    image: postgres:10

networks:
  api-network:
    driver: bridge

volumes:
  pgReportData:
    driver: local
  node_modules:

.env:

NODE_ENV=development
PORT=30780
HOST_SERVICE=postgres-db
DATABASE_SERVICE=base
USER_SERVICE=user
PASSWORD_SERVICE=password
DIALECT=postgres
PORT_SERVICE=5444

api-docker.dockerfile:

FROM node:12
WORKDIR /src
COPY . .
COPY --chown=node:node . .
USER node
RUN npm install
EXPOSE $PORT
ENTRYPOINT ["npm", "run", "start:dev"]

当我跑步时: 码头工人组成

我收到此错误:

有什么想法吗?

有人可以帮我吗??

【问题讨论】:

  • 您的 postgre-db 在容器内的哪个端口上运行?它只能由节点访问吗?如果是这样,为什么要将端口映射到主机网络?你只需要把它暴露给容器网络

标签: node.js postgresql docker docker-compose


【解决方案1】:

如果 node 是唯一连接到 postgre-db 的应用程序,您可以删除网络,并公开 postgredb 运行端口 (5432)。要连接到数据库,您只需使用容器名称作为主机即可。

连接字符串:"postgres://YourUserName:YourPassword@postgres-db:5432/YourDatabase";

version: '3.5'

services:
  api-service:
    build:
      context: .
      dockerfile: ./api-docker.dockerfile
    image: api-service
    container_name: api-service
    restart: always
    env_file: .env
    environment:
      - NODE_ENV=$NODE_ENV
    ports:
      - ${PORT}:3000
    volumes:
      - .:/home/node/api
      - node_modules:/home/node/api/node_modules
    depends_on:
      - postgres-db
    command: npm run start:dev 

  postgres-db:
    expose:
      - 5432
    restart: always
    env_file: .env
    volumes:
      - pgReportData:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: ${USER_SERVICE}
      POSTGRES_PASSWORD: ${PASSWORD_SERVICE}
      POSTGRES_DB: ${DATABASE_SERVICE}
    container_name: postgres-db
    image: postgres:10

volumes:
  pgReportData:
    driver: local
  node_modules:

【讨论】:

  • 谢谢!我解决问题。但现在我无法从 Postman 中的 Docker 访问 API...使用 localhost
  • 我尝试使用127.0.0.1:30780/api/routelocalhost:30780/api/route,但是没有用。
  • 使用docker psdocker port api-service确保端口在容器上正确映射
猜你喜欢
  • 2021-11-01
  • 2019-04-13
  • 1970-01-01
  • 2020-05-26
  • 2021-06-20
  • 2022-11-20
  • 2020-05-14
  • 2018-11-03
  • 1970-01-01
相关资源
最近更新 更多