【发布时间】:2023-03-13 22:32:01
【问题描述】:
我有一个简单的 Springboot 应用程序连接到两个不同的 SQL Server 数据库。当它们都在本地托管时,我没有问题。但是我需要将它们中的每一个都放在一个单独的 docker 容器中,当我这样做时,我在 Springboot 应用程序开始时收到一个 SQLServerException 告诉我:
com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host '172.21.0.3', port 1434 has failed. Error: "'172.21.0.3'. Verify the connection properties.
172.21.0.3 是我的一个数据库的 IP,1434 是端口。
当我执行时,我使用一个名为 network_gls(似乎不起作用)的 docker 网络将我的容器(gls_app、mssql_1 和 mssql_2)连接在一起:
docker inspect network_gls
(注意:此行的执行是在 Springboot 应用容器启动之后和出错之前)
我得到以下结果:
[
{
"Name": "network_gls",
"Id": "88895acb2247b3b63b0cc29656fcb6d1a0d4a8192a8c7c1bb7b79362509e0742",
"Created": "2020-09-28T15:21:39.995019917Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.21.0.0/16",
"Gateway": "172.21.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"0754d8766736806549e99500c143420c556e9370c14f897f6beb82c24a3c1124": {
"Name": "mssql_1",
"EndpointID": "6d886cf8f2aed256d8cbc7141d9ea5242f7ce61d95ae5412c16905d1b490f133",
"MacAddress": "02:42:ac:15:00:02",
"IPv4Address": "172.21.0.2/16",
"IPv6Address": ""
},
"54d20a9a409053eaf53eb5c7e73e340ab29c12ceaf8ac20b109d1403cba0c3d3": {
"Name": "mssql_2",
"EndpointID": "e675f72fc6c737201a31dd485496e749d386165eaa90a6647e0bf13507683028",
"MacAddress": "02:42:ac:15:00:03",
"IPv4Address": "172.21.0.3/16",
"IPv6Address": ""
},
"7e4ae1a46358fe9081c5277cb52ec49681b44631d6d9c1cdcaf6116326277d37": {
"Name": "gls_app",
"EndpointID": "d9051cd0134f5074b2b756b44b60cced85d2cac2fd04653e0f52ddb9ada339b9",
"MacAddress": "02:42:ac:15:00:04",
"IPv4Address": "172.21.0.4/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
在我的 Springboot 应用程序中,我的连接字符串如下所示(mssql_2 中的数据库示例):
jdbc:sqlserver://172.21.0.3:1433;DatabaseName=gls
docker 网络方面对我来说是新的,如果我在这个问题中遗漏了重要信息,请告诉我
提前致谢
【问题讨论】:
-
如何启动 3 个容器?
docker-compose? -
@DuyPhan 我将
docker-compose up用于我的数据库,docker run用于 Springboot 应用程序,您认为这可能是个问题吗? -
您是否阅读过背景资料,例如 Docker 文档中的 Networking in Compose?您能否提供一个minimal reproducible example,包括
docker-compose.yml和完整的docker run命令? (如果您不在 Compose 创建的网络上使用docker run --net,它将无法正常工作;docker inspect通常不需要容器来查找其 IP 地址或最佳实践。)
标签: spring-boot docker docker-networking