如何实现Docker容器间的通信,假设有以下场景,本机部署多个容器,想要实现:
- 数据库使用Docker部署,如何去连接
- 服务A依赖服务B,需要调用Http请求
容器部署完,端口映射好后,正常从本地localhost:{port}是可以访问的,但是如果从容器A内部访问容器B是调不通的。这里涉及到Dockert网络通信相关知识。官方文档:https://docs.docker.com/network/
具体操作如下:
- 创建自定义网络设置
docker network create my-net
- 将相关容器加入该网络
docker network connect my-net my-containerId
。也可以在创建容器的时候,命令行上加上--network my-net
。 - 调整连接配置,假设服务A依赖容器mssql,端口映射为 -p 1444:1433。本地的连接字符串为
Server=localhost,1444;Database=MyContext;User ID=sa;Password=123456@SA;Connect Timeout=30
。调整为Server=mssql;Database=MyContext;User ID=sa;Password=123456@SA;Connect Timeout=30
, mssql 为容器mssql的容器name。
注意这里映射的端口号是容器内部的端口号,而不是映射到外部的端口号,连接字符串用的是mssql默认端口,不用特别标记。
这样容器与容器之间以容器name相互通信。