两个 docker 容器使用相同的 phpmyadmin 端口

时间:2021-07-03 19:36:03

标签: docker

我想使用相同的 phpmyadmin 端口,并且只为两个不同的服务创建两个不同的数据库。是否有可能?我试过这个:

docker-compose.yml 用于第一个服务

version: '3.8'
services:
  accounting-software:
    build:
      context: .
      dockerfile: Dockerfile
    command: 'php artisan serve --host=0.0.0.0'
    volumes:
      - .:/app
    ports:
      - 8000:8000
    depends_on:
      - accounting_db
  
  accounting_db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: accounting_software
    ports:
      - "3308:3306"
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    restart: always
    environment:
      PMA_HOST: accounting_db
      PMA_USER: root
      PMA_PASSWORD: root
    ports:
      - "8080:80"

      

docker-compose.yml 用于第二个服务

version: '3.8'
services:
  accounting-chat:
    build:
      context: .
      dockerfile: Dockerfile
    command: 'php artisan serve --host=0.0.0.0'
    volumes:
      - .:/app
    ports:
      - 8001:8000
    depends_on:
      - chat_db
  
  chat_db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: accounting_chat
    ports:
      - "3309:3306"
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    restart: always
    environment:
      PMA_HOST: chat_db
      PMA_USER: root
      PMA_PASSWORD: root
    ports:
      - "8080:80"

我收到以下错误:

<块引用>

来自守护进程的错误响应:驱动程序在端点 accounting-chat_phpmyadmin_1 上编程外部连接失败(6bed4e2c149b0bf6ed3079f50984c4322cb4fce6c693c3b1c92e8f29229654a7):绑定为 0:8 端口已失败: 已分配:

1 个答案:

答案 0 :(得分:0)

让我们看看这两个 docker-compose 文件的最后几行。它们都有“8080:80”端口。如果您需要运行 phpmyadmin 的两个实例,您应该更改其中之一。例如,将其中之一更改为“8081:80”,或者您可以运行一个实例。由于您更改了聊天数据库端口。

version: '3.8'
services:
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    restart: always
    environment:
      PMA_HOST: accounting_db
      PMA_USER: root
      PMA_PASSWORD: root
    ports:
      - "8080:80"

  accounting-software:
    build:
      context: .
      dockerfile: Dockerfile
    command: 'php artisan serve --host=0.0.0.0'
    volumes:
      - .:/app
    ports:
      - 8000:8000
    depends_on:
      - accounting_db
  
  accounting_db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: accounting_software
    ports:
      - "3308:3306"
    depends_on:
      - phpmyadmin

  

  accounting-chat:
    build:
      context: .
      dockerfile: Dockerfile
    command: 'php artisan serve --host=0.0.0.0'
    volumes:
      - .:/app
    ports:
      - 8001:8000
    depends_on:
      - chat_db
  
  chat_db_2:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: accounting_chat
    ports:
      - "3309:3306"
    depends_on:
      - phpmyadmin

有关详细信息,第一个端口是您的本地机器端口,第二个端口是用于容器的。由于您的机器上有一个唯一的可用端口,因此您不能在该端口上运行另一个实例,该端口上有一个服务。它应该被杀死或更改为另一个端口。