Sql server Docker容器:无法按名称连接到SQL Server
我在同一个网络上创建了两个容器,其中一个作为正在运行的Sql Server实例。在另一个容器(使用SQL工具)中,我可以使用IP地址连接到SQL,但是如果我切换到机器名,它就会失败 我已经尝试了ping机器,dns正在解决正确的IP,我也尝试了dnslookup,它也在工作。有人知道如何解决这个问题吗 完整测试场景:Sql server Docker容器:无法按名称连接到SQL Server,sql-server,linux,docker,sqlcmd,Sql Server,Linux,Docker,Sqlcmd,我在同一个网络上创建了两个容器,其中一个作为正在运行的Sql Server实例。在另一个容器(使用SQL工具)中,我可以使用IP地址连接到SQL,但是如果我切换到机器名,它就会失败 我已经尝试了ping机器,dns正在解决正确的IP,我也尝试了dnslookup,它也在工作。有人知道如何解决这个问题吗 完整测试场景: 创建新网络 docker network create --driver=bridge specsnet 运行SQL容器 docker run -e 'ACCEPT_EULA=
docker network create --driver=bridge specsnet
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Password!123456' -p 1401:1433 -d --name=TestDBServer --net=specsnet --rm microsoft/mssql-server-linux:latest
sqlcmd
的TestDBServer
部分引用了一个所谓的。由于您当前设置Docker网络的方式,无法访问这些服务器别名。如果你想为你建立网络,它应该会起作用
另一种方法是将有问题的容器链接在一起。正如Bjoern建议的那样,我创建了一个docker compose文件,在做了一些测试之后,我意识到问题没有得到解决 然后我开始操作文件,调整属性,发现问题出在SQL容器名称上(容器名称有大写字母)。我将SQL容器名设置为“testdbserver”,一切正常
我在使用网关和微服务时遇到了同样的问题:
- 创建网络:
docker网络创建mynet
- 添加容器:
curl -i http://my_service_8080:8080/management/info
HTTP/1.1 400
Transfer-Encoding: chunked
Date: Tue, 23 Feb 2021 12:51:47 GMT
Connection: close
在网上做了大量的研究之后,我终于有了一个想法,提供了一个别名:
docker network connect --alias gateway mynet my-gateway
docker network connect --alias myservice mynet my_service_8080
现在,我可以使用别名作为主机名成功地在容器之间通信:
curl -i http://myservice:8080/management/info
HTTP/1.1 200
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 23 Feb 2021 12:54:36 GMT
{"name":"myservice-app","description":"my service","version":"20210202"}
编辑:
在进一步挖掘之后,我发现如果名称(或别名)包含下划线字符,则使用容器名称的通信将不起作用。因此,如果遇到问题,请检查容器名称
sqlcmd -S tcp:TestDBServer,1433 -U sa -P 'Password!123456'
version: '2'
services:
testdbserver:
image: microsoft/mssql-server-linux:latest
ports:
["1401:1433"]
environment:
SA_PASSWORD: Password!123456
ACCEPT_EULA: Y
networks:
- specsnet
sqltools:
image: mcr.microsoft.com/mssql-tools:latest
depends_on:
- testdbserver
networks:
- specsnet
networks:
specsnet:
driver: bridge
ipam:
config:
- subnet: 10.5.0.0/16
gateway: 10.5.0.1
docker-compose run sqltools bash
sqlcmd -S tcp:testdbserver,1433 -U sa -P 'Password!123456'
docker network connect mynet my-gateway
docker network connect mynet my_service_8080
curl -i http://my_service_8080:8080/management/info
HTTP/1.1 400
Transfer-Encoding: chunked
Date: Tue, 23 Feb 2021 12:51:47 GMT
Connection: close
docker network connect --alias gateway mynet my-gateway
docker network connect --alias myservice mynet my_service_8080
curl -i http://myservice:8080/management/info
HTTP/1.1 200
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 23 Feb 2021 12:54:36 GMT
{"name":"myservice-app","description":"my service","version":"20210202"}