Я пытаюсь запустить локальную среду разработки с несколькими проектами.
После некоторой тяжелой работы я наткнулся на этот проект , и начал адаптировать его к моим собственным проектам.
Каждый проект состоит из 2-х контейнеров, MySQL-контейнера и PHP-контейнера (из php-apache
образ).
nginx-proxy
это отдельный контейнер, работающий в сети. Я слегка переименовал проект, поэтому здесь он называется dev-router_default
,
Мой проект compose.yml
выглядит так:
version: "3"services:
php:
build: './.docker/php/'
volumes:
- .:/var/www/html/
environment:
- VIRTUAL_HOST=XXX.local
mysql:
build: './.docker/mysql/'
ports:
- "3309:3306"environment:
MYSQL_DATABASE: XXX
MYSQL_USER: XXX
MYSQL_PASSWORD: XXX
MYSQL_ROOT_PASSWORD: XXX
VIRTUAL_HOST: XXX.local
networks:
default:
external:
name: dev-router_default
dockerfiles
в этих папках просто основные изображения прямо сейчас. Они просто существуют, поэтому я могу увеличить их позже.
Все работает довольно гладко. Я могу получить доступ к БД, я могу загрузить HTML и PHP-страниц.
Тем не мение. Всякий раз, когда я загружаю страницу. У меня есть 50% шанс получить эту ошибку:
SQLSTATE[HY000] [1045] Access denied for user
Остальные 50% загрузок страниц работают просто отлично.
Это не проблема с неправильным паролем или что-то еще. Все настройки остаются прежними, но как-то одно соединение отклоняется, а другое проходит.
У меня есть чувство, что nginx-proxy
не перенаправляет мой трафик на правильный контейнер mysql половину времени. Но я не могу найти, куда звонят. Когда я загружаю страницу, я вижу в своем CLI контейнера всплывающее окно журнала для загрузки php_1. Но mysql_1 молчит.
Кто-нибудь знает, что является причиной этого несоответствия?
Есть ли более простой способ настроить среду разработки с помощью докера, который одновременно использует несколько виртуальных хостов / доменов?
Мне нужно иметь возможность доступа к нескольким базам данных (я делаю это, давая каждому проекту определенный порт для прохождения прямо сейчас), и получаю уникальный URL для каждого проекта, привязанного к document_root
,
Проблема была в названии сервиса.
Все проекты имеют php и MySQL-контейнер.
Я получаю доступ к mysql HOST через имя службы (которая в данном случае является mysql для всех проектов).
Хост «mysql» был определен несколько раз в нескольких проектах.
Именование контейнера mysql имя_проекта-mysql исправило это.
Других решений пока нет …