我的dotnet核心应用程序运行在我的一个docker容器中,需要通过他们的IP连接到一些外部服务,其中一个是在谷歌云托管的远程服务器上单独运行的sql数据库。当不运行docker时,应用程序运行没有问题,但运行docker时,它失败了
An error occurred using the connection to database 'PartnersDb' on server '30.xx.xx.xx,39876'.
fail: Microsoft.EntityFrameworkCore.Update[10000]
An exception occurred in the database while saving changes for context type 'Partners.Api.Infrastructure.Persistence.MoneyTransferDbContext'.
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled conn
ections were in use and max pool size was reached.
我的Docker合成文件如下所示
version: "3.5"
networks:
my-network:
name: my_network
services:
partners:
image: partners.api:latest
container_name: partners
build:
context: ./
restart: always
ports:
- "8081:80"
environment:
- ASPNETCORE_ENVIRONMENT=Docker
- ConnectionStrings:DefaultConnection=Server=30.xx.xx.xx,39876;Database=PartnersDb;User Id=don;Password=Passwor123$$
networks:
- my-network
volumes:
- /Users/mine/Desktop/logs:/logs
我有
- bin被敲进了正在运行的容器,我可以对远程sql数据库服务器执行ping操作
1.我还可以通过telnet连接到数据库端口上的远程sql数据库服务器
然而,问题出现时,我做码头组成了,然后我得到上面的错误。码头版本19.03.5,构建633a0ea正在MacOS Mojave 10.14.6上运行
我真的不知道在这个阶段该怎么办。
1条答案
按热度按时间jm81lzqq1#
有两个独立的网络。内部docker是一个独立的网络。外部docker,在主机上,它是一个不同的网络。如果你是通过本地主机或IP地址访问它,它不会像你期望的那样工作。
将显示类似的输出,如下所示:
您需要在本地添加Java服务的主机。请尝试运行以下命令:
维修:
希望这能解决问题。
More here: https://docs.docker.com/engine/reference/run/#managing-etchosts
对于合作伙伴数据库:
如果PartnersDb是SQL数据库,则必须通过SQL Server配置管理器〉SQL Server网络配置〉TCP/IP属性配置SQL Server以侦听特定端口。
更多信息:https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/configure-a-server-to-listen-on-a-specific-tcp-port?view=sql-server-ver15
MySQL也有类似的设置。
之后,您必须运行
add-host
开关你也可以用这些设置来更新
hosts
文件。我更喜欢通过命令行来更新。