Docker 容器应用程序无法连接到 Docker 主机中的 SQL Server

Web*_*ser 6 docker docker-networking

Docker 容器(基于microsoft/dotnet-framework映像)中的 .NET 应用程序无法连接到安装在 Docker 主机系统上的 SQL Server 2016。Docker 主机为 Windows Server 2016。Docker 版本为 17.03.2-ee-5。

我使用以下命令序列运行容器和 .NET 应用程序:

docker run -it microsoft/dotnet-framework cmd
docker cp App <container-id>:/
docker exec -it <container-id> cmd
cd App
TestConn.exe
Run Code Online (Sandbox Code Playgroud)

TestConn.exe 在大约 10 秒后抛出异常,抱怨它无法连接到 SQL Server。连接字符串是:

Data Source=localhost;Initial Catalog=SomeDB;Persist Security Info=False;User ID=appuser;Password=apppwd;MultipleActiveResultSets=False;Connection Timeout=30;
Run Code Online (Sandbox Code Playgroud)

如果我在 Docker 主机系统中运行 TestConn.exe,则应用程序成功连接到 SQL Server。

我添加--expose=1433docker run命令 - 没有用。我希望它起作用的方式是 TestConn.exe 尝试连接到 localhost(默认 SQL 端口 1433),然后连接到 Docker 主机中的端口 1433,该端口对应于 SQL Server。

eat*_*ate 5

您正在寻找的功能确实存在,IP 是“host.docker.internal”,您可以用它替换“localhost”,应用程序将能够连接到在另一个 Docker 容器中运行的数据库。

此功能仅适用于 18.03 版及以上的 Mac 和 Windows(此版本尚不支持 Linux...)。在 Linux 中,“在 docker run 命令中使用 --net="host",那么 docker 容器中的 localhost 将指向你的 docker 主机。”

如何从 docker 容器访问主机端口有更多相关信息。