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

时间:2017-08-23 00:39:51

标签: docker docker-networking

Docker容器中的.NET应用程序(基于microsoft/dotnet-framework映像)无法连接到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

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;

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

我在--expose=1433命令中添加了docker run - 没有用。我期望这种方式工作的方式是TestConn.exe尝试连接到localhost(默认SQL端口1433),而localhost又连接到Docker主机中的端口1433,该端口对应于SQL Server。

1 个答案:

答案 0 :(得分:2)

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

仅从18.03版开始,并且适用于Mac和Windows(此版本尚不支持linux ...)。在linux的docker run命令中“使用--net =“ host”,然后docker容器中的localhost将指向您的docker主机。”

How to access host port from docker container对此有更多信息。