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

Docker多项目容器网络配置:跨项目访问+容器隔离+SSH端口映射

Docker Compose 实现跨项目访问+容器隔离方案

核心配置思路

要满足需求,关键是做两层网络隔离:

  • 给所有Resources容器分配一个共享网络,允许Users容器接入
  • 每个Users容器分配专属的独立网络,避免互相通信,同时映射SSH端口到主机

一、分项目实现方案

1. Resources 项目配置(docker-compose.yml)

先创建Resources的专属网络,让内部服务都在这个网络里:

version: '3.8'

networks:
  resources_net:
    driver: bridge
    # 允许外部容器(Users)访问,不要设为internal: true

services:
  resource_db:
    image: mysql:8.0
    networks:
      - resources_net
    environment:
      MYSQL_ROOT_PASSWORD: example
    # 按需添加数据卷、端口映射等配置

启动Resources项目,自动创建resources_net网络:

docker-compose up -d

2. Users 项目配置(docker-compose.yml)

每个Users容器单独使用专属网络,同时接入Resources的共享网络,避免容器间互访:

version: '3.8'

networks:
  resources_net:
    external: true  # 引用Resources项目创建的外部网络
  user1_net:
    driver: bridge
    internal: true  # 仅允许当前容器和关联网络访问
  user2_net:
    driver: bridge
    internal: true

services:
  user1_ssh:
    image: linuxserver/openssh-server
    ports:
      - "2222:22"  # 主机端口2222映射到容器SSH端口
    networks:
      - user1_net
      - resources_net
    environment:
      PUID: 1000
      PGID: 1000
      USER_PASSWORD: user1pass

  user2_ssh:
    image: linuxserver/openssh-server
    ports:
      - "2223:22"  # 不同用户用不同主机端口
    networks:
      - user2_net
      - resources_net
    environment:
      PUID: 1000
      PGID: 1000
      USER_PASSWORD: user2pass

启动Users项目:

docker-compose up -d

二、macvlan 问题修复(若坚持使用)

如果之前用macvlan遇到访问问题,需要补全主机端配置:

  1. 开启主机网卡混杂模式:
ip link set eth0 promisc on
  1. 创建macvlan网络时指定子网和网关:
docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 macvlan_net
  1. 添加主机路由,让主机能访问macvlan容器:
ip route add 192.168.1.0/24 dev eth0

注意:macvlan默认允许同网络容器互访,需额外添加iptables规则阻止Users容器间通信,不如bridge方案简便。


三、更优方案:单Compose项目统一管理

没必要拆分两个项目,把所有服务放在同一个compose文件里,管理更高效:

version: '3.8'

networks:
  resources_net:
    driver: bridge
  user1_net:
    driver: bridge
    internal: true
  user2_net:
    driver: bridge
    internal: true

services:
  # Resources 服务
  resource_db:
    image: mysql:8.0
    networks:
      - resources_net
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db_data:/var/lib/mysql

  # Users SSH 服务
  user1_ssh:
    image: linuxserver/openssh-server
    ports:
      - "2222:22"
    networks:
      - user1_net
      - resources_net
    environment:
      PUID: 1000
      PGID: 1000
      USER_PASSWORD: user1pass

  user2_ssh:
    image: linuxserver/openssh-server
    ports:
      - "2223:22"
    networks:
      - user2_net
      - resources_net
    environment:
      PUID: 1000
      PGID: 1000
      USER_PASSWORD: user2pass

volumes:
  db_data:

优势

  • 一键启动/停止所有服务,无需维护多个配置文件
  • 网络和资源集中管理,避免外部网络依赖问题
  • 扩展更方便,新增用户或资源服务只需追加配置

验证方法

  1. 进入user1容器,尝试ping user2容器的IP/名称,应无法连通
  2. 在user1容器内ping resource_db,应能正常访问
  3. 从公网/主机执行ssh user@你的主机IP -p 2222,可登录user1容器;同理用2223端口登录user2容器

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:02:06