2016-10-01 1 views
0

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

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' (с использованием пароля: YES) в /var/www/html/index.php on line 7 Невозможно подключиться к 'db'

+0

$ dbhost должно быть «localhost», я думаю? – Tester

+0

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

+0

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

ответ

0

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

environment: - MYSQL_ROOT_PASSWORD=wp 

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

Так что, когда я подключен к контейнеру тузд и побежал:

mysql -h localhost -p -u root wp 

Использование паролей «РГ» не работает, но пароль «пароль» работал.

Итак, кажется, что env vars не работает на mariadb. Он также не создал wp wordpress.

0

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

+0

Это commad сообщает мне, что сервер mysql находится на ip 172.18.0.2, но с использованием $ dbhost = 'db' или $ dbhost = '172.18.0.2' не работает. По-прежнему такая же ошибка: доступ запрещен для пользователя'root'@'172.18.0.3 – hazmah0

+1

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

+0

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

Смежные вопросы