Не удается подключиться к mysql в контейнере докеров из phpbb

Мой док-контейнер работает хорошо, и я могу подключиться к своей базе данных с помощью моего графического клиента sql.

Однако, когда я пытаюсь подключиться к моему экземпляру phpbb, я получаю эту ошибку:

Общая ошибка SQL ERROR [ mysqli ]

Нет такого файла или каталога [2002]

Ошибка SQL при получении этой страницы. Пожалуйста, свяжитесь с администратором, если эта проблема не исчезнет.

Конфиг phpbb выглядит так:

$dbms = 'mysqli';
$dbhost = 'localhost';
$dbport = '';
$dbname = 'xxxxx_xxxx';
$dbuser = 'xxxxxxxxx';
$dbpasswd = 'xxxxxx';

Будет ли файл или каталог, который он не может найти, относиться к mysql.so? Если да, то где бы я установил это в конфигах докеров?

Тогда никто не знает, что происходит?

Изменить для ясности:

Мой docker-compose.yml выглядит так, как показано ниже, и я запускаю его с помощью «docker-compose up».

php: image: webdevops/php-nginx ссылки: - db:database volumes: - порты "/home/xxx/code/mytest:/mytest-now": - среда 80:80: - WEB_DOCUMENT_ROOT=/mytest/public

db:
  image: mariadb:latest
  volumes:
    - "mytest-db:/var/lib/mysql"
  ports:
    - "3306:3306"
  environment:
    MYSQL_ROOT_PASSWORD: admin
    MYSQL_DATABASE: dbname
    MYSQL_USER: user
    MYSQL_PASSWORD: password

person iKode    schedule 17.09.2017    source источник
comment
Как у вас работает контейнер? Есть несколько контейнеров?   -  person Sergiu    schedule 17.09.2017
comment
@Sergiu - это моя машина для разработчиков, поэтому я запускаю ее с помощью «docker compose up». Я разместил свой файл docker-compose.yml выше для ясности.   -  person iKode    schedule 18.09.2017


Ответы (2)


Причина, по которой ваше соединение не работает, заключается в использовании localhost. Я предполагаю, что вы запустили свой контейнер mysql либо через docker-compose, либо через docker и сопоставили хост формы порта 3306 с 3306 в контейнере.

Теперь, используя графический интерфейс, вы используете localhost:3306, и это работает, потому что вы перенаправили порт докера на порт хоста.

Но ваш контейнер phpbb localhost ссылается на сам контейнер, и, следовательно, соединение не может быть установлено. Так что есть несколько способов заставить его работать

IP-адрес хоста

Используйте IP-адрес хоста, на котором вы сопоставили порт 3306.

$dbhost = '192.168.0.102';

Это не рекомендуемый подход, поскольку IP-адрес вашего хоста будет меняться при подключении к другим сетям.

Использовать имя контейнера mysql

Запустите свой контейнер mysql с --name mysqldb и используйте это имя в соединении

$dbhost = 'mysqldb';

Использовать имя службы mysql

Если вы используете docker-compose и добавили mysql в качестве службы

version: '3'
services:
  mysqldb2:
    image: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
  phpbb:
    .....

Затем вы можете использовать имя службы в настройках подключения.

$dbhost = 'mysqldb2';
person Tarun Lalwani    schedule 17.09.2017
comment
Спасибо! Я запустил проверку докера и увидел IP-адрес хоста 0.0.0.0, когда я пытаюсь использовать его, я получаю «Отказано в соединении [2002]». В противном случае я еще не пользуюсь услугами. Это моя машина для разработки и моя первая попытка докера, нужен ли мне сервис? Я разместил свой файл docker-composer.yml выше, надеюсь, есть простой способ... спасибо за вашу помощь! - person iKode; 18.09.2017

После запуска «docker inspect containername» я заметил IP-адрес в разделе: NetworkSettings.Networks.bridge.gateway.

Когда я попробовал это, это сработало!

person iKode    schedule 18.09.2017