docker compose MySQL container [2002] Соединение отклонено

2

Я пытаюсь построить docker compose контейнеры для Nginx + PHP (Laravel) + MySQL, но я продолжаю получать отказ от отказа Connection

докер-compose.yml

version: "3"
services:

    nginx:
        image: nginx:latest
        ports:
            - '8080:80'
        volumes:
            - ./nginx:/etc/nginx/conf.d
            - ./logs/nginx:/var/logs/nginx
            - ./apps:/var/www/html
        depends_on:
            - php
        restart: always

    php:
        image: laradock/php-fpm:2.2-7.2
        volumes:
            - ./apps:/var/www/html
        restart: always
    mysql:
        image: mariadb
        ports:
            - '33060:3306'
        volumes:
            - ./db:/var/lib/mysql
        environment:
            - MYSQL_ROOT_PASSWORD=root
        restart: always

В ./apps меня есть новое приложение Laravel с базовой настройкой SQL

Все контейнеры работают без ошибок, и я могу подключиться к контейнеру MySQL, используя

mysql -u 127.0.0.1 -P 33060 -u root -p

но я все время получаю ошибку 2002, когда пытаюсь получить доступ из браузера или прямого ssh в php-контейнер.

У меня есть nginx и mysql, работающие на сервере, поэтому я использую порт 8080 и 33060, но не уверен, что эта проблема.

.env

DB_CONNECTION=mysql
DB_HOST=127.0.0
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=root
DB_PASSWORD=secret

Спасибо за любую помощь.

  • 0
    Я подозреваю, что ваше приложение laravel пытается достичь mysql через порт 3306, в то время как оно отображается как 33060 контейнером mysql. Убедитесь, что приложение php настроено на использование порта 33060 для подключения к MySQL.
Теги:
docker

1 ответ

6
Лучший ответ

получить идею из этого выпуска Github

Мое первое предположение состоит в том, что он умирает, пытаясь найти файл сокета mysql unix, когда ему нужно соединение через нелокальное соединение. Если вы используете файл compose для их запуска, то вы можете подключиться к имени dns, предоставленному docker (т.е. Links: docker-mysql, устанавливает для dns имя docker-mysql). Таким образом, вы должны изменить свою линию соединения:

- php -r "new PDO('mysql:host=localhost;port=3306;charset=utf8', 'root', '123123');"

+ php -r "new PDO('mysql:host=docker-mysql;port=3306;charset=utf8', 'root', '123123');"

решил эту проблему, изменив DB_HOST на имя контейнера докера в файле .env

DB_HOST=docker_mysql_1
  • 0
    Я искал ответ 2 часа, большое спасибо =)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню