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

如何用Docker为PHP+MySQL+phpMyAdmin应用创建30个独立实例

问题分析与解决

8082端口phpMyAdmin故障原因

你的配置存在两处核心错误,导致db1服务无法被php2和phpmyadmin2正常访问:

  • db1端口映射错误:MySQL容器内部默认监听3306端口,你配置的ports: - 3307:3307是把外部3307端口映射到容器内不存在的3307端口,db1服务实际无法提供数据库服务。
  • 内部连接端口错误:php2和phpmyadmin2的配置里,连接db1时用了3307端口——这是外部访问端口,Docker内部服务之间通信应该使用容器内部的3306端口。

修正后的配置片段

version: '3.9'

services:
  php1:
    build: .
    ports:
      - "8001:80"
    environment:
      - MYSQL_HOST=db:3306
      - MYSQL_DATABASE=vehicle_insurance
      - MY_USER=root
      - MY_PASSWORD=root
    depends_on:
      - db
    volumes:
      - "./qApiLabs/:/var/www/html"

  php2:
    build: .
    ports:
      - "8002:80"
    environment:
      - MYSQL_HOST=db1:3306  # 修正为容器内部端口3306
      - MYSQL_DATABASE=vehicle_insurance
      - MY_USER=root
      - MY_PASSWORD=root
    depends_on:
      - db1
    volumes:
      - "./qApiLabs/:/var/www/html"

  db:
    image: mysql:8.0
    environment:
      - MYSQL_DATABASE=vehicle_insurance
      - MYSQL_ROOT_PASSWORD=root
    ports:
      - 3306:3306
    volumes:
      - "./db:/docker-entrypoint-initdb.d"

  db1:
    image: mysql:8.0
    environment:
      - MYSQL_DATABASE=vehicle_insurance
      - MYSQL_ROOT_PASSWORD=root
    ports:
      - 3307:3306  # 修正为外部3307映射到容器内3306
    volumes:
      - "./db1:/docker-entrypoint-initdb.d"

  phpmyadmin1:
    image: phpmyadmin/phpmyadmin
    environment:
      PMA_HOST: db:3306
      PMA_USER: root
      PMA_PASSWORD: root
    ports:
      - "8081:80"

  phpmyadmin2:
    image: phpmyadmin/phpmyadmin
    environment:
      PMA_HOST: db1:3306  # 修正为容器内部端口3306
      PMA_USER: root
      PMA_PASSWORD: root
    ports:
      - "8082:80"

30个独立实例的批量优化方案

手动编写30组服务会极度繁琐,推荐以下两种方式:

1. 脚本化批量创建实例

定义一组基础服务模板,通过环境变量区分实例的端口、卷路径:

  • 将web、db、phpmyadmin服务的端口、卷目录用${INSTANCE_ID}这类变量替换
  • 编写shell脚本循环生成30个实例,每个实例分配唯一ID,动态配置端口和卷目录

示例脚本思路:

for i in {1..30}
do
  INSTANCE_ID=$i \
  WEB_PORT=800$i \
  DB_PORT=330$i \
  PMA_PORT=808$i \
  docker-compose up -d
done

2. 使用Docker Swarm部署服务栈

如果有多台服务器,Docker Swarm可以更高效地批量管理实例:

  • 通过deploy: replicas直接指定30个实例数量
  • 配置独立的存储卷和端口映射规则,确保每个实例的数据库和web环境完全隔离

注意:每个数据库实例需要绑定独立的初始化脚本卷,保证所有用户的初始数据库状态一致且互不干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:08:11