#php #database #laravel #docker
Вопрос:
У меня есть два сайта, которые работают в отдельных контейнерах через laravel sail. Я отредактировал .env
файлы, чтобы назначить разные порты, чтобы они могли работать одновременно. Один прослушивает порты 80/3306, а другой-порты 4000/3310.
Оба сайта работают, но база данных с портом 3310 отказывается от подключения, когда laravel пытается получить к ней доступ или если я попытаюсь выполнить миграцию. Я могу подключиться к базе данных через DBeaver, чтобы знать, что база данных там есть. Ошибка, которую он выдает, заключается в SQLSTATE[HY000] [2002] Connection refused
Я хочу, чтобы оба сайта использовали одну и ту же базу данных, ту, что на порту 3306, я ввел соответствующие учетные данные в .env
. Первый сайт подключается к базе данных(эти два находятся в одном контейнере), но второму сайту (который находится в отдельном контейнере) отказано в доступе, как и в случае с его собственной базой данных, но на этот раз ошибка SQLSTATE[HY000] [1044] Access denied for user
docker-compose.yml
Файлы не изменились, я изменил только порты в .env
файлах
все контейнеры docker находятся в одной сети (sail)
Я не уверен, что я делаю неправильно, мой опыт работы с докером ограничен использованием его через sail, я был бы очень признателен, если бы кто-нибудь мог указать мне правильное направление
Я попробовал некоторые предложения от переполнения стека, такие как изменение пароля, воссоздание базы данных вручную и изменение хоста базы данных, но ничего не сработало
вот docker-compose.yml
контейнер, которому не удается подключиться к базе данных
# For more information: https://laravel.com/docs/sail
version: '3'
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.0
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.0/app
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-80}:80'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mariadb
mariadb:
image: 'mariadb:10'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- 'sailmariadb:/var/lib/mysql'
networks:
- sail
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
retries: 3
timeout: 5s
networks:
sail:
driver: bridge
volumes:
sailmariadb:
driver: local
Комментарии:
1. Можете ли вы опубликовать свой docker-compose.yml
2. вам не нужно менять порт БД, вы должны иметь возможность использовать одну и ту же БД с обеими службами, если у вас работает только одна служба БД
3. @PeterDavis добавил
4. @apokryfos итак, я должен удалить службу бд из одного из двух контейнеров?
5. Я думаю, что каждая служба в службах вашего docker-compose является собственным контейнером, поэтому я думаю, что вы могли бы рассмотреть возможность переноса одного из ваших приложений laravel в другое docker-compose.yml, чтобы убедиться, что при запуске контейнеров они все запускаются вместе, а не нужно составлять их по отдельности