два сайта, одна база данных с laravel sail

#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, чтобы убедиться, что при запуске контейнеров они все запускаются вместе, а не нужно составлять их по отдельности