如何将Docker化NATS客户端连接至另一容器中的NATS服务器?
Docker容器中NATS客户端连接服务器的正确地址
因为Docker容器拥有独立的网络命名空间,客户端容器里的localhost指向的是容器自身,而非NATS服务器容器,所以原代码里的nats://localhost:4222无法建立连接,你可以根据部署场景选下面两种方案:
方案一:使用Docker网络的服务名(推荐)
- 确保两个容器处于同一个Docker网络(可以用自定义网络,也可以用默认的bridge网络)
- 启动NATS服务器容器时指定一个固定名称,比如:
docker run -d --name nats-server nats - 客户端代码里的连接地址替换为服务器容器的名称,Docker内置DNS会自动解析这个名称对应的容器IP:
s = natsConnection_ConnectTo(&conn, "nats://nats-server:4222");
方案二:使用宿主机映射的IP和端口
- 如果启动NATS服务器时已经把4222端口映射到宿主机(比如用
-p 4222:4222参数):docker run -d -p 4222:4222 nats - 客户端代码里的连接地址替换为宿主机的实际IP(比如宿主机在局域网的IP是
192.168.3.10):s = natsConnection_ConnectTo(&conn, "nats://192.168.3.10:4222"); - 也可以用Docker容器网关的IP(通常是宿主机在容器网络里的IP,比如
172.17.0.1,可以通过docker inspect nats-server查看)
内容的提问来源于stack exchange,提问作者Mephisto_08
相关产品推荐
相关产品推荐

