You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose配置容器内外网访问及frontend网络创建问题

你的Docker Compose配置调整建议

首先,你的配置接近正确但有两处关键调整点,才能完全匹配你的需求:

1. 移除testapi的端口暴露(核心修正)

当前testapi的ports: - 3098:3098会把容器的3098端口映射到主机,这意味着外界可以通过主机IP:3098直接访问到testapi,违反了你"外界无法访问(B)"的要求。必须删除这一行配置,让testapi仅在backend内部网络中可见。

2. 优化API调用地址(可选但推荐)

你现在用http://192.168.0.1:3098调用API,其实在同一个Docker网络里,容器可以通过容器名/服务名直接通信。把调用地址改成http://testapi:3098会更灵活——不用依赖固定的子网IP,后续调整网络配置时也不用修改前端代码。

修正后的完整docker-compose.yml

version: '3.7'
services:
  shinyapptest:
    container_name: testshiny
    image: testshiny
    restart: unless-stopped
    networks:
      - frontend
      - backend
    ports:
      - 80:3838
  testapi:
    container_name: testapi
    image: testapi
    restart: unless-stopped
    networks:
      - backend
    # 移除ports配置,禁止外界直接访问
networks:
  backend:
    external:
      name: backend
  frontend:
    external:
      name: frontend

如何创建frontend网络?

根据错误提示,直接执行以下命令创建即可:

docker network create frontend

这个网络默认是bridge模式,刚好满足需求:shinyapptest同时连接frontend和backend网络,既能和testapi通信,又能通过frontend网络映射端口让外界访问。

验证配置是否符合需求

  • 外界访问:通过主机IP的80端口可以正常访问shinyapptest(因为ports映射了80:3838)。
  • 容器间通信:shinyapptest在backend网络中,能通过http://testapi:3098访问testapi。
  • 外界无法访问testapi:testapi没有暴露端口到主机,且仅存在于backend内部网络,外界无法直接连接。

内容的提问来源于stack exchange,提问作者Ignacio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:40:13