【问题标题】:Cannot connect Docker Container to another Container [duplicate]无法将 Docker 容器连接到另一个容器 [重复]
【发布时间】:2021-12-16 19:52:43
【问题描述】:

我有 2 个容器:

  • 数据库 (azuresqledge)
  • 应用程序 (my-dbup-app - .NET 6.0)

我可以从我的主机访问数据库容器并通过 localhost 从我的主机运行 .NET 应用程序。

当我尝试通过 Docker 运行应用程序时,应用程序找不到 SQL Server 实例。

Server=azuresqledge;Database=databasename;User Id=sa;password=pwd;Trusted_Connection=False;MultipleActiveResultSets=true;

System.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:TCP Provider,错误:35 - 捕获到内部异常)

我确保两者都在同一个 Docker 网络上运行 - bridge - 所以我只需要将连接字符串设置为容器的名称,但是应用程序无法连接。

我在 Mac M1 上运行,所以需要使用azuresqledge

我在配置中缺少什么吗?

谢谢。

【问题讨论】:

  • 你是如何启动容器的;为什么你认为他们在同一个网络上?特别是,如果您在没有--net 选项的情况下运行docker run,则它们位于default bridge network 上,并且实际上无法使用通常的方式相互通信。参见例如How to communicate between Docker containers via "hostname"
  • 我没有指定网络,所以我现在创建了一个新网络并使用docker network connect <network-name> <container-name> 将我的两个容器移动到它现在可以连接。谢谢!
  • 为了回答你的第一个问题,我用Portainer查看了所有网络,发现我的容器在网络上bridge

标签: c# docker docker-networking


【解决方案1】:

我在 Mac 上遇到了 --net=host--net=bridge 的问题。我相信这可能是因为 mac 上没有 docker0 桥。

https://docs.docker.com/desktop/mac/networking/#there-is-no-docker0-bridge-on-macos

https://forums.docker.com/t/network-bridge-on-host/12414

您是否尝试过手动公开您的端口?从您的链接中看起来azure-sql-edge 想要端口1433 暴露。 -p 1433:1433

【讨论】:

  • 我没有用我的docker run 指定网络,所以它使用的是默认网络--net=bridge。我创建了一个新网络,它现在可以通过容器名称进行连接。我已经从 azure-sql-edge 容器中暴露了端口。
猜你喜欢
  • 2020-01-30
  • 2016-01-29
  • 1970-01-01
  • 2019-09-04
  • 2022-01-04
  • 1970-01-01
  • 2019-02-24
  • 2017-10-15
  • 2019-03-17
相关资源
最近更新 更多