Lumen / Docker / MySQL (SQLSTATE [HY000] [2002] Соединение отказано) Но я могу подключиться извне - PullRequest
0 голосов
/ 17 февраля 2019

Схожу с ума по этому вопросу.

У меня есть настройки Lumen и MySQL в контейнере Docker.Почти все хорошо идти.Я могу запустить контейнер и получить доступ к Lumen через браузер.Я могу получить доступ к MySQL через Sequel Pro, нет проблем.И я могу запустить php artisan migrate, и он работает нормально.

Но если я попытаюсь что-либо сделать через Lumen в браузере, он не подключится к базе данных и выдаст ошибку «Отказ в соединении».

Я использую Lumen 5.7.7 и файл .env выглядит следующим образом:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=root

docker-compose.yml выглядит следующим образом:

version: '3'
services:
  api:
    build:
      context: .
      dockerfile: .docker/Dockerfile
    image: laravel-docker
    ports:
      - 8080:80
    depends_on:
      - mysqldb
    volumes:
      - .:/srv/app
    # container_name:
  mysqldb:
    image: mysql:5.7
    container_name: mysqldb
    command: mysqld --user=root --verbose
    volumes:
       - ./schemadump.sql:/docker-entrypoint-initdb.d/schemadump.sql
    ports:
      - 3306:3306
    environment:
      MYSQL_DATABASE: test
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      MYSQL_ROOT_PASSWORD: root
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"

РЕДАКТИРОВАТЬ: Запустите phpinfo () насайт и в командной строке и понял, что это даже не одна и та же версия, не говоря уже о тех же точных деталях.Может ли это быть проблемой здесь?Глядя на это больше ...

1 Ответ

0 голосов
/ 17 февраля 2019

Ну, это работает сейчас, вроде.Теперь он работает из браузера, а не из командной строки, с которой я могу работать.Из вышеприведенного комментария похоже, что проблема заключалась в отсутствующем разделе «ссылка», соединяющем API с базой данных.Файл .env не изменился, но docker-compose.yml теперь выглядит следующим образом:

version: '3'
services:
  api:
    build:
      context: .
      dockerfile: .docker/Dockerfile
    image: laravel-docker
    ports:
      - 8080:80
    links:
      - mysql
    volumes:
      - .:/srv/app
    environment:
      DB_HOST: mysql
      DB_DATABASE: test
      DB_USERNAME: test
      DB_PASSWORD: test
  mysql:
    image: mysql:5.7
    ports:
      - 13306:3306
    environment:
      MYSQL_DATABASE: test
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      MYSQL_ROOT_PASSWORD: root

Добавлен раздел «environment» в раздел api файла yml.Это помогло.И изменил порт так, чтобы он имел другой внешний порт по сравнению с внутренним портом.Не на 100% какая часть заставила его работать правильно, но сейчас он работает нормально, и я не собираюсь его больше менять.

...