如何从Docker容器连接到远程服务

7y4bm7vi  于 2022-12-26  发布在  Docker
关注(0)|答案(1)|浏览(190)

我的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

我有

  1. bin被敲进了正在运行的容器,我可以对远程sql数据库服务器执行ping操作
    1.我还可以通过telnet连接到数据库端口上的远程sql数据库服务器
    然而,问题出现时,我做码头组成了,然后我得到上面的错误。码头版本19.03.5,构建633a0ea正在MacOS Mojave 10.14.6上运行
    我真的不知道在这个阶段该怎么办。
jm81lzqq

jm81lzqq1#

有两个独立的网络。内部docker是一个独立的网络。外部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>

希望这能解决问题。
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开关

docker run --add-host PartnersDb:<ip address of PartnersDb database> <your image>

你也可以用这些设置来更新hosts文件。我更喜欢通过命令行来更新。

相关问题