Не удается подключить мой php-контейнер к контейнеру mysql

#docker #docker-compose

#docker #docker-compose

Вопрос:

Я совершенно новичок в docker и пытаюсь создать LEMP-стек с помощью docker-compose. Все мои контейнеры запущены, но я не могу подключить мой php-контейнер к моему контейнеру mysql. У меня есть docker-compose.yml, который выглядит следующим образом:

 version: '2'

services:
nginx:
image: evild/alpine-nginx:1.9.15-openssl
container_name: lemp_nginx
restart: always
links:
  - php:php
volumes:
  - ./html:/var/www/html/:ro
  - ./nginx/conf/nginx.conf:/etc/nginx/conf/nginx.conf:ro
  - ./nginx/conf.d:/etc/nginx/conf.d:ro
ports:
  - 80:80
  - 443:443

php:
build:
  context: .
  dockerfile: Dockerfile.php-fpm
container_name: lemp_php
restart: always
volumes:
  - ./html:/var/www/html
depends_on:
  - db
links:
  - db:db

db:
image: mariadb:latest
container_name: lemp_mariadb
restart: always
volumes:
  - db-data:/var/lib/mysql
environment:
  MYSQL_ROOT_PASSWORD: wp
  MYSQL_DATABASE: wp
volumes:
db-data:
driver: local
  

Затем в моей папке . / html я создал index.php файл со следующим содержимым для проверки подключения к БД:

 <?php

$dbuser = 'root';
$dbpass = 'wp';
$dbhost = 'db';

$connect = mysqli_connect($dbhost, $dbuser, $dbpass) or die("Unable to      Connect to '$dbhost'");

echo "Connected to DB!";
  

Результат следующий:
Предупреждение: mysqli_connect(): (HY000 / 1045): доступ запрещен для пользователя ‘root’ @’172.18.0.3′ (с использованием пароля: ДА) в /var/www/html/index.php в строке 7
Невозможно подключиться к «db»

Комментарии:

1. $ dbhost должен быть ‘localhost’, я полагаю?

2. Не работает: «Предупреждение: mysqli_connect(): (HY000 / 2002): нет такого файла или каталога в /var/www/html/index.php в строке 7 не удается подключиться к «localhost»» Это не может быть localhost, потому что в php-контейнере не работает mysql, верно?

3. Хорошо, теперь я прочитал вашу правку. Ошибка отказа в доступе означает, что подключение работает, но есть / есть некоторые проблемы с разрешениями

4. Можете ли вы подключить его из командной строки или другого браузера mysql?

5. Я пробовал с MySQL workbench. Точно такое же сообщение об ошибке.

Ответ №1:

Чтобы получить IP-адрес любого контейнера, запустите docker inspect <container_name> | grep IPAddress . С помощью IP-адреса вы сможете подключаться к другим контейнерам.

Комментарии:

1. Эта запятая сообщает мне, что сервер mysql находится на ip 172.18.0.2, но использование либо $dbhost= ‘db’, либо $dbhost= ‘172.18.0.2’ не работает. Все та же ошибка: доступ запрещен для пользователя ‘root’ @’172.18.0.3

2. Если $dbhost = '172.18.0.2' и ваша ошибка Access denied for user 'root'@'172.18.0.3 . Похоже, вам нужно проверить еще раз, потому что IP изменился с 172.18.0.2 на 172.18.0.3 при выполнении кода. Похоже, что-то еще меняет ваш IP-код. Я посоветую вам запустить docker exec -it <container_id> bash на терминале. Замените container_id его на ваш mysql container_id. Проверьте подключение к БД с помощью mysql -h localhost -p -u root wp

3. мой php-контейнер имеет ip 172.18.0.3, а мой контейнер mysql имеет ip 172.18.0.2. Поскольку его php-контейнер пытается подключиться к mysql на 172.18.0.2, сообщение об ошибке кажется правильным, не так ли? Кажется, что php-контейнер может попытаться подключиться, но контейнер mysql отвечает отказом в доступе, поскольку в этом случае запрос отправляется с другого адреса, отличного от localhost root@172.18.0.3 ?

4. Обнаружена проблема. Это была следующая строка: environment: — MYSQL_ROOT_PASSWORD=wp, которая не сработала, вместо пароля root был «пароль». Итак, когда я подключился к контейнеру mysql и запустил: mysql -h localhost -p -u root wp. Использование пароля «wp» не сработало, но пароль «password» сработал. Похоже, переменные среды не работают для mariadb. Он также вообще не создавал wp wordpress.

5. Приятно, это кажется странным.

Ответ №2:

Обнаружена проблема. Это была следующая строка:

 environment: - MYSQL_ROOT_PASSWORD=wp 
  

Это не сработало, вместо этого корневым паролем был «пароль».

Поэтому, когда я подключился к контейнеру mysql и запустил:

 mysql -h localhost -p -u root wp
  

Использование пароля «wp» не сработало, но пароль «password» сработал.

Итак, похоже, что переменные среды не работают для mariadb. Он также вообще не создавал wp wordpress.