我使用的是Digital Ocean Docker Drop,它具有3个Docker容器:1个用于前端,1个用于后端,1个用于其他具有不同依赖关系的工具,我们将其称为后端2。
前端调用后端1,后端1依次调用后端2。后端2容器通过端口50051公开gRPC服务。在本地,通过运行以下命令,我能够确定要以IP 127.17.0.1运行的docker服务:
docker network inspect bridge --format='{{json .IPAM.Config}}'
因此,我了解可以从服务器中的以下URL 127.17.0.1:50051访问我的gRPC服务器。
不幸的是,gRPC服务器从docker drop运行时拒绝连接,而在本地运行时运行良好。
有什么不同之处吗?
答案 0 :(得分:1)
通常,您应该建立一个Docker专用网络,以使用其容器名称在容器之间进行通信。参见例如 How to communicate between Docker containers via "hostname"。如果您删除并重新创建容器,并且无法从脱离主机访问Docker,则内部Docker IP地址可能会发生更改,并且通常不尝试这样做。
172.17.0.0/16是Docker内部IP网络的典型默认值(127.0.0.0/8是保留的IPv4回送网络),看起来您可能已经打错了从docker network inspect
获得的地址
答案 1 :(得分:0)
使用以下命令尝试docker run
:
docker run -d -p {server ip}:12345 {back-end 2 image}
它将IP端口暴露给docker容器,并且可以从其他服务器访问。
注意:如果防火墙阻止了访问,还请检查防火墙规则。
答案 2 :(得分:0)
您可以运行docker绑定到IP和端口,如Aakash所示。请限制对此特定IP和端口的访问只能从其他Docker IP和端口访问-这将有助于以私有方式运行docker,并且不允许其他(甚至网络中的其他docker / instance)。