#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
файлах?