Проблемы с подключением к Mysql в docker контейнере через PDO, но командная строка работает - PullRequest
0 голосов
/ 18 января 2020

Краткое резюме моего вопроса: Какая характеристика c моего docker -компонента сталкивается с PDO, что предотвращает Host -> mysql - docker через PDO, но позволяет Host -> mysql - docker из все другие инструменты?


Файл конфигурации моего приложения:

database:
  host: mysql
  port: 3306
  name: <name>
  username: <username>
  password: <pass>
  outsideContainerConnections:
    host: 127.0.0.1
    port: 3307

В контейнере все работает нормально, и я могу получить доступ к базе данных с хоста, используя PHPStorm или Mysql в командной строке.

Если я запускаю эту команду с хоста, она подключается

mysql --port=3307 -h 127.0.0.1 -u <username> -p

Однако, если я пытаюсь подключиться с php на хосте с использованием PDO происходит сбой с

PDOException: SQLSTATE [HY000] [2002] Соединение отклонено

DSN DSO, которые я пробовал:

mysql:host=127.0.0.1:3307;port=;dbname=<name>;&charset=utf8;
    or
mysql:host=127.0.0.1;port=3307;dbname=<name>;&charset=utf8;
    or
mysql:host=127.0.0.1:3307;dbname=<name>;&charset=utf8;

Я читал об использовании localhost vs 127.0.0.1 для форсирования TCP, и я делаю это здесь.

Здесь также находится соответствующий раздел моего docker - composer. Опять же, используя командную строку или другие инструменты с хоста, все работает нормально, проблема заключается только в PDO. Что бы это ни стоило, PDO в другом контейнере в docker -композитной сети ведет себя.

mysql:
  build: './mysql_docker'
  command: --lower_case_table_names=0
  ports:
    - '3307:3306'
  volumes:
    - ./volumes/mysql:/var/lib/mysql
    - ./volumes/my.cnf:/etc/my.cnf
  networks:
    - app-tier

Спасибо за чтение.

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Я решил это - это простой, но, надеюсь, хороший урок.

В одном случае файл PHP запускался cron, и поэтому он запускался локально, вне контейнер docker. У меня был небольшой синтаксис или другая ошибка в моем файле, поэтому у cron возникли некоторые проблемы.

Чтобы отладить эту ситуацию, я открывал файл в своем веб-браузере - и это кикер. Ошибки соединения, которые я видел в веб-браузере, были не такими, как у cron, потому что эта страница обслуживалась контейнером docker. Таким образом, детали подключения должны были отличаться. Одна и та же настройка не может работать как с хоста, так и с соседнего контейнера.

Что я узнал, так это; то, что кажется действительно сложной технической проблемой, требующей много ручного чтения и исследования, МОЖЕТ быть простым ошибочным предположением. Иногда стоит вернуться к чертежной доске и набросать схему ситуации с нуля.

Так я и задал этот вопрос, так что спасибо за предоставленное место.

0 голосов
/ 18 января 2020

попробуйте "mysql --port = 3307 -h 127.0.0.1 -u -p" от клиента, если нет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...