如何在Django的相同本地IP地址上启动所有Docker容器?

时间:2018-12-29 01:38:16

标签: django docker docker-compose ip

我正在用docker编写基于django的应用程序,其中有3个在不同容器中运行的项目应用程序。所有django应用程序都在0.0.0.0:8000上运行。

但是当我检查容器的ip地址以在浏览器中浏览应用程序时,它们都在不同的ip地址上运行:

172.18.0.10:8000运行的project1可以在以下位置访问:172.18.0.10:8000/app1172.18.0.9:8000上运行的project2可以在以下位置访问:172.18.0.9:8000/app2172.18.0.7:8000运行的project3可以在以下位置访问:172.18.0.7:8000/app3

这使我的应用程序的超链接不可用。如何在一个ip'localhost:8000'上运行所有容器?

有什么建议我要去哪里吗?

1 个答案:

答案 0 :(得分:0)

您在设计中错了,将多个容器映射到一个ip +端口是根本不可能的。一个ip上的一个端口始终是一个正在侦听的应用程序,无论它是否是容器应用程序。

简单证明:谁又决定将请求发送到哪个容器?对所有人?那么谁来决定哪个响应是正确的呢?这就是ip地址和端口,以便能够将请求发送到特定计算机上的特定应用。

我认为您应该重新考虑您所做的一切,并对网络进行更多的研究。有一些在线课程。 (我不想以任何方式让您灰心,只是给您一个正确的方向)

无需重新设计应用程序的简单解决方案,就可以将应用程序置于反向代理服务器(例如nginx)的前面。那是对我的修辞问题的回应。反向代理可以是一个中间人,可以根据ip / port之类的其他内容来决定向哪个应用程序发送请求。反向代理在某个特定端口上侦听,然后根据您提供给它的规则(例如,基于路径),可以将请求代理到特定的应用程序/ ip /端口,然后将响应代理回去。

但是,在这种情况下,反向代理更多的是hack,而不是适当的解决方案,请记住这一点。