我正在将我的应用程序转换为容器,但很难让两个容器通过主机的接口相互通信。
配置方面,我的每个应用程序都是这样设置的:
app1: Listens for incoming socket connections on 127.0.0.1:4444
app2: Connects to the socket server on 127.0.0.1:4444
Docker 明智地我以这种方式启动我的应用程序:
docker run -p 4444:4444 -itd --name app1 app1
docker run -itd --name app2 app2
app2 无法连接到 app1。我遇到了麻烦。我该如何调试?
编辑:
看起来容器内的 127.0.0.1 不是正确的选择。这会将服务器/客户端绑定到 lo 接口,而不是与主机的桥接接口。
相反,docker 可以通过创建新的 docker 网络根据 --name 执行一些自动 DNS:
# docker network create myapp
# docker run --network myapp -p 4444:4444 -itd --name app1 app1
# docker run --network myapp -itd --name app2 app2
在 docker 容器内部,服务器不再绑定并连接到 127.0.0.1,而是绑定到 app1:4444,客户端连接到 app1:4444。主机名将解析为 docker 分配的桥接 IP。
问题: 虽然现在我可以看到 IP 解析正确,但连接最终会超时。