我有一个完全在我的MacBook上本地运行的Web应用程序.
Webapp有一个前端(Angular / Javascript)和一个后端(Python / Django),它实现了RESTful API.
我对后端进行了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
请提供参考资料,说明如何实现这一目标.
最佳答案
这样做的方法是今天Docker Networking,另一个答案简要提到.
简短版本是您可以运行docker network ls来获取您的网络列表.默认情况下,您应该有一个名为bridge.您可以创建一个新的,也可以在创建容器时通过–net = bridge来使用它.从那里,使用相同网络启动的容器可以通过暴露的端口相互通信.
如果您按照上面提到的那样使用Docker Compose,那么当您使用与项目文件夹匹配的名称和附加的_default运行docker-compose时,它将为您创建桥接网络. Compose文件中定义的每个图像都将自动在此网络中启动.
尽管如此,我猜你的前端是一个只提供HTML / JS / CSS的网络服务器,这些页面访问后端服务.如果这是准确的,那么在这种情况下你并不需要容器到容器的通信……因为连接来自客户端系统,所以都需要暴露给主机.