Как правильно запустить контейнер mysql в Docker для Laravel 8*x
Есть файл docker-compose.yml следующего содержания:
version: '3.8'
services:
nginx:
build:
context: ./docker/nginx
dockerfile: Dockerfile
volumes:
- ./:/var/www
depends_on:
- php-fpm
- php-cli
ports:
- "80:80"
php-fpm:
build:
context: ./docker/php-fpm
dockerfile: Dockerfile
environment:
XDEBUG_CONFIG: "remote_host=host.docker.internal remote_enable=1"
PHP_IDE_CONFIG: "serverName=Docker"
volumes:
- ./:/var/www
depends_on:
- mysql
php-cli:
build:
context: ./docker/php-cli
dockerfile: Dockerfile
environment:
XDEBUG_MODE: "coverage"
volumes:
- ./:/var/www
- composer:/root/.composer/cache
depends_on:
- mysql
mysql:
image: mysql:5.7
volumes:
- mysql:/var/www/lib/mysql
environment:
MYSQL_DATABASE: "${DB_DATABASE}"
MYSQL_ROOT_PASSWORD: "${DB_PASSWORD}"
MYSQL_ROOT_HOST: "%"
ports:
- "${DB_PORT}:${DB_PORT}"
networks:
- backend
# postgres:
# image: postgres:13.3
# volumes:
# - postgres:/var/www/lib/postgresql/data
# environment:
# POSTGRES_USER: "admin"
# POSTGRES_PASSWORD: "YkDdkAoF"
# POSTGRES_DB: "cabinet-ul"
# ports:
# - "5432:5432"
phpmyadmin:
image: phpmyadmin:latest
environment:
PMA_HOST: mysql
ports:
- "8080:80"
networks:
- backend
depends_on:
- mysql
volumes:
composer:
mysql:
# postgres:
networks:
backend:
# ipam:
# driver: default
# config:
# - subnet: 172.25.0.3/24
и файл .env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=database_test
DB_USERNAME=root
DB_PASSWORD=root
DATABASE_URL=${DB_CONNECTION}://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_DATABASE}
Информация о контейнерах:
source_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
source_nginx_1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp
source_php-cli_1 docker-php-entrypoint php -a Exit 0
source_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
source_phpmyadmin_1 /docker-entrypoint.sh apac ... Up 0.0.0.0:8080->80/tcp
Проект Laravel запустился и даже работает, с phpmyadmin тоже всё норм захожу и что-то там делаю под root-ом но вот когда я пытаюсь авторизоваться в своём приложении выходит ошибка:
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for mysql failed: Temporary failure in name resolution (SQL: select * from `users` where `email` = [email protected] limit 1)
Весь день я потратил на чтении документации и разных статей но ничего не помогло (видимо плохо читал) и отчаявшись найти решение я решился написать сюда, надеюсь вы мне поможете и расскажите что я делаю не так.
Это мой первый опыт работы с Docker-ом так что будьте полегче )
Ответы (1 шт):
Включите сервисы php-fpm, php-cli, nginx в единую сеть:
networks:
- backend
Добавьте в environment mysql сервиса переменную:
MYSQL_USER: "${DB_USERNAME}"
MYSQL_PASSWORD: "${DB_PASSWORD}"
И лучше не использовать подключение к БД из приложения с привилегированным пользователем root и не устанавливать одинаковые пароли для root и рядового пользователя.
После добавления выполните команду:
docker-compose down -v && docker-compose up -d --build