我需要在docker容器中运行的dotnet核心应用程序通过其IP连接到某些外部服务,其中之一是在google云托管的远程服务器上单独运行的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
我有
但是,当我做docker-compose时出现问题,然后出现上述错误。 Docker版本19.03.5,内部版本633a0ea在MacOS Mojave 10.14.6上运行
我真的不知道现阶段该怎么做。
答案 0 :(得分:0)
有两个独立的网络。泊坞窗内部是一个单独的网络。在docker之外,在主机上,这是一个不同的网络。如果通过本地主机或IP地址访问它,它将无法正常工作。
docker network ls
将显示类似如下的输出:
NETWORK ID NAME DRIVER SCOPE
58a4dd9893e9 133_default bridge local
424817227b42 bridge bridge local
739297b8107e host host local
b9c4fb3ed4ba none null local
您需要在本地添加Java服务的主机。尝试像下面的命令一样运行:
docker run --add-host remoteservice:<ip address of java service> <your image>
希望能解决这个问题。
更多内容:https://docs.docker.com/engine/reference/run/#managing-etchosts
如果PartnersDb是SQL数据库,则必须将SQL Server配置为侦听特定端口。通过“ SQL Server配置管理器”>“ SQL Server网络配置”>“ TCP / IP属性”。
MySQL也有类似的设置。
之后,您必须运行add-host
开关
docker run --add-host PartnersDb:<ip address of PartnersDb database> <your image>
您也可以使用这些设置来更新hosts
文件。我更喜欢通过命令行。