Один и тот же порт phpmyadmin для двух контейнеров docker

#docker

Вопрос:

Я хочу использовать один и тот же порт phpmyadmin и создавать только две разные базы данных для двух разных служб. Возможно ли это? Я попробовал это:

docker-составьте файл.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-составьте файл.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"

 

Я получаю следующую ошибку:

Ответ на ошибку от демона: драйвер не смог запрограммировать внешнее подключение на учет конечных точек-chat_phpmyadmin_1 (6bed4e2c149b0bf6ed3079f50984c4322cb4fce6c693c3b1c92e8f29229654a7): Привязка для 0.0.0.0:ошибка 8080: порт уже выделен`

Ответ №1:

Давайте посмотрим на последние строки обоих 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
 

Для получения более подробной информации первый порт-это порт вашего локального компьютера, а второй порт предназначен для контейнера. Поскольку у вас есть один уникальный доступный порт на вашем компьютере, вы не можете запустить другой экземпляр на порту, на котором есть служба. Его следует отключить или переключить на другой порт.

Комментарии:

1. Я хочу иметь один экземпляр PHPMYADMIN, возможно ли это?

2. @Alea Да! это возможно. Просто запустите один из них. Вы можете удалить второе phpmyadmin из своего файла docker-compose, а затем узнать запущенные изображения (контейнеры) с помощью docker container ls команды.

3. Но chat_db не создается на phpmyadmin

4. @Alea Готово. Я думаю, вы можете проверить это сейчас!

5. Нужно ли мне указывать это в обоих docker-compose.yml файлах?