docker - 如何设置暴露的 docker 前端和非暴露的后端?
问题描述
我有一个简单的 docker 网络,里面有两个容器。前端的端口映射为 80:80,因此我可以通过浏览器中的 localhost 访问它。我的后端没有映射其端口(3000)。我希望我的前端可以在我的网络上访问,但不希望我的后端可以访问。
我遇到的问题是我无法从浏览器向我的前端发出请求。两个容器都在正确的网络上,并且可以在内部进行通信。
例如:在前端容器内使用 curl 提供来自后端的预期输出:
curl 10.5.0.4:3000/test
但是从网页调用
axios.get(10.5.0.4:3000/test)
会导致404错误。
问题是 axios 请求来自浏览器,因此无法连接到 docker 网络吗?如果是这样,是否有不涉及使后端可在 docker 网络之外访问的解决方案?
为了清楚起见,这是我的 docker-compose 文件
services:
backend:
build: ./testbe
image: testbe:dev
networks:
test_net:
ipv4_address: 10.5.0.4
frontend:
build: ./testfe
image: testfe:dev
networks:
test_net:
ipv4_address: 10.5.0.5
ports:
- "80:80"
networks:
test_net:
driver: bridge
driver_opts:
com.docker.network.endable_ipv6: "false"
ipam:
driver: default
config:
- subnet: 10.5.0.0/5
gateway: 10.5.0.1
解决方案
您不应该使用容器的私有 IP 来调用它,而是调用它在网络上的名称。
推荐阅读
- python - 重载方法并调用super
- json - 在打字稿中使用 & 运算符
- reactjs - 自动建议不立即显示项目
- ios - 在 SwiftUI PreviewProvider 中更改模型视图状态
- python-2.7 - 无法在 frolvlad/alpine-python2 docker 映像上安装 tensorflow
- python - 在 pandas 数据框中有效地迭代多个系列
- python - 带有网格的表格,在运行时显示我关于脚本的消息
- python - python 上的 Azure Edge 解决方案无法创建多个设备孪生?
- vtk - 在 Python 中使用 paraview 过滤器,Paraview python api
- java - 究竟是什么导致网格不显示?爪哇摇摆