实体框架和 Docker 容器

问题描述 投票:0回答:2

首先,我对我的英语感到抱歉。

我正在开发 ASP.NET Core Web API,并且正在与朋友一起工作。为了舒适地协同工作,我想使用我们的 API 设置一个 Docker,并运行一个数据库。我对实体框架有疑问。

问题来了,Postgres 的容器名称是

postgres_image
,所以从 api 连接到它的连接字符串是:

"Host=postgres_image;Port=5432;Database=grdedb;Username=postgres;Password=postgres"

它正在发挥作用。但是,当我想创建一个实体框架迁移到位于 Docker 容器中的数据库时,它不起作用;我必须将主机更改为 localhost。

但是当我更改它时,迁移会起作用,之后 API 就会停止。

非常感谢您的帮助

我的 docker 撰写文件

version: '3.4'

networks:
  grdeapi-dev:
    driver: bridge

services:
  grdeapi:
    image: grdeapi
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - 5101:5101
    networks:
      - grdeapi-dev
  postgres_image:
    image: postgres:latest
    ports:
      - 5432:5432
    restart: always
    volumes: 
      - db_volume:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: "postgres"
      POSTGRES_PASSWORD: "postgres"
      POSTGRES_DB: "grdedb"
    networks:
      - grdeapi-dev
volumes: 
  db_volume:

我的连接字符串

"Host=postgres_image;Port=5432;Database=grdedb;Username=postgres;Password=postgres"

以及我从实体框架得到的错误

Failed to connect to 212.95.74.75:5432

当我将主机更改为 localhost 时,实体框架可以工作,但我的 dotnet api 无法连接到我的数据库。

postgresql entity-framework asp.net-core
2个回答
1
投票

有一个用于在 Docker 中运行的配置,以及一个用于在开发中运行的配置。

在前者中(例如,将其命名为

appsettings.Development.Docker.json
)使用 Docker 主机名(“postgres_image”)配置连接字符串,并在本地(从 Visual Studio 运行或针对所述数据库服务器运行迁移时)仅使用“localhost”。将后者命名为
appsettings.Development.json

然后相应地调整您的 DOTNET_ENVIRONMENT:

services:
  grdeapi:
    DOTNET_ENVIRONMENT: "Development.Docker"

0
投票

Я понял вашу проблему, т.к. мой английский уровня Junior --, то напишу на русском。 可以使用 PowerShell。我们将在 docker-compose.yml 中提供 переход 和 папку где находится файл。 потом через Power Shell запустите команду docker-compose up

если все прошло успешно, то на экране не будет ошибок.可以使用 ConnectionString 上的标签名称,例如本地主机和 IP 名称。 например если в yml указано 端口: - “5010:80” 建造: 语境: 。 dockerfile: ./Dockerfile 网络: - 应用程序-nw

postgres_train: 容器名称:测试数据库 图片:postgres:最新 环境: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_DB=testdb

то строка подключения будет выглядеть как:"ConnectionStrings": { "DCs": "服务器=postgres_train;端口=5432;数据库=testdb;用户id=postgres;密码=postgres;" }。 и сделайте 取决于 от 取决于: - postgres_train。 оно нужно чтобы api развернулось после того как поднимется база данных.

всем большой рахмет!

© www.soinside.com 2019 - 2024. All rights reserved.