一尘不染

如何在本地主机上运行时让Docker容器互相交谈?

docker

我有一个完全在MacBook本地运行的Webapp。

Webapp具有实现RESTful API的前端(Angular / Javascript)和后端(Python / Django)。

我已经对后端进行了Docker化,以使其完全独立于Docker容器并暴露端口8000。我将此端口本地映射到4026。

现在我需要对前端进行Docker化。但是,如果我在本地主机上运行了这两个docker容器,如何获取FE以将HTTP请求发送到BE?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

请提供解释如何实现此目标的参考。


阅读 292

收藏
2020-06-17

共1个答案

一尘不染

今天的方法是Docker
Networking
,这是另一个简短的答案。

简短的版本是您可以运行docker network ls以获取网络列表。默认情况下,您应该有一个叫bridge。您可以创建一个新--net=bridge容器,也可以在创建容器时通过传递使用它。从那里,使用同一网络启动的容器可以通过暴露的端口相互通信。

如果您如上所述使用Docker
Compose
,它将在运行时为您创建一个桥接网络docker-compose up,其名称与项目文件夹相匹配并_default附加。Compose文件中定义的每个映像将自动在此网络中启动。

话虽如此,我想您的前端是一个只提供HTML / JS /
CSS的Web服务器,而这些页面访问后端服务。如果这是正确的话,那么在这种情况下,您实际上并不需要容器到容器的通信……因为连接都是从客户端系统发起的,所以两者都需要暴露给主机。

2020-06-17