Я пытаюсь построить docker compose контейнеры для Nginx + PHP (Laravel) + MySQL, но я продолжаю получать отказ от отказа Connection
докер-compose.yml
version: "3"
services:
nginx:
image: nginx:latest
ports:
- '8080:80'
volumes:
- ./nginx:/etc/nginx/conf.d
- ./logs/nginx:/var/logs/nginx
- ./apps:/var/www/html
depends_on:
- php
restart: always
php:
image: laradock/php-fpm:2.2-7.2
volumes:
- ./apps:/var/www/html
restart: always
mysql:
image: mariadb
ports:
- '33060:3306'
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
restart: always
В ./apps
меня есть новое приложение Laravel с базовой настройкой SQL
Все контейнеры работают без ошибок, и я могу подключиться к контейнеру MySQL, используя
mysql -u 127.0.0.1 -P 33060 -u root -p
но я все время получаю ошибку 2002, когда пытаюсь получить доступ из браузера или прямого ssh в php-контейнер.
У меня есть nginx и mysql, работающие на сервере, поэтому я использую порт 8080 и 33060, но не уверен, что эта проблема.
.env
DB_CONNECTION=mysql
DB_HOST=127.0.0
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=root
DB_PASSWORD=secret
Спасибо за любую помощь.
получить идею из этого выпуска Github
Мое первое предположение состоит в том, что он умирает, пытаясь найти файл сокета mysql unix, когда ему нужно соединение через нелокальное соединение. Если вы используете файл compose для их запуска, то вы можете подключиться к имени dns, предоставленному docker (т.е. Links: docker-mysql, устанавливает для dns имя docker-mysql). Таким образом, вы должны изменить свою линию соединения:
- php -r "new PDO('mysql:host=localhost;port=3306;charset=utf8', 'root', '123123');"
+ php -r "new PDO('mysql:host=docker-mysql;port=3306;charset=utf8', 'root', '123123');"
решил эту проблему, изменив DB_HOST
на имя контейнера докера в файле .env
DB_HOST=docker_mysql_1