我的 MacBook 上有一个完全在本地运行的 Web 应用程序。
Webapp 有一个前端 (Angular/Javascript) 和一个实现 RESTful API 的后端 (Python/Django)。
我已经对后端进行了 Docker 化,使其在 Docker 容器中完全自包含并公开端口 8000。我将此端口本地映射到 4026。
现在我需要对前端进行 Dockerize 化。但是如果我在我的本地主机上运行这两个 docker 容器,我怎样才能让 FE 向 BE 发送 HTTP 请求? FE 容器不知道存在于它之外的任何东西。正确的?
这就是我运行 FE 的方式:
$ http-server
Starting up http-server, serving ./
Available on:
http://127.0.0.1:8080
http://192.168.1.16:8080
Hit CTRL-C to stop the server
请提供参考资料,解释我如何实现这一目标。
原文由 Saqib Ali 发布,翻译遵循 CC BY-SA 4.0 许可协议
今天做到这一点的方法是 Docker Networking 。
简短的版本是您可以运行
docker network ls
来获取您的网络列表。默认情况下,您应该有一个名为bridge
。您可以创建一个新容器,也可以在创建容器时通过传递--net=bridge
来使用这个容器。从那里,使用同一网络启动的容器可以通过暴露的端口相互通信。如果您使用前面提到的 Docker Compose ,它将在您运行
docker-compose up
时为您创建一个桥接网络,名称与您的项目文件夹匹配并附加_default
。 Compose 文件中定义的每个图像都会自动在此网络中启动。尽管如此,我猜你的前端是一个只提供 HTML/JS/CSS 的网络服务器,这些页面访问后端服务。如果这是准确的,那么在这种情况下,您实际上并不需要容器到容器的通信……两者都需要暴露给主机,因为连接来自客户端系统。