首先,我对我的英语感到抱歉。
我正在开发 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 无法连接到我的数据库。
有一个用于在 Docker 中运行的配置,以及一个用于在开发中运行的配置。
在前者中(例如,将其命名为
appsettings.Development.Docker.json
)使用 Docker 主机名(“postgres_image”)配置连接字符串,并在本地(从 Visual Studio 运行或针对所述数据库服务器运行迁移时)仅使用“localhost”。将后者命名为appsettings.Development.json
。
然后相应地调整您的 DOTNET_ENVIRONMENT:
services:
grdeapi:
DOTNET_ENVIRONMENT: "Development.Docker"
Я понял вашу проблему, т.к. мой английский уровня 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 развернулось после того как поднимется база данных.
всем большой рахмет!