Symfony 4 «Отказано в соединении» при попытке подключиться к контейнеру Docker MySQL - PullRequest
0 голосов
/ 05 февраля 2019

У меня вопрос, как настроить соединение с контейнером mysql.

Вот мой docker-compose.yml

version: '3'
services:
php:
    build: ./php-fpm
    volumes:
        - ./iym:/var/www/iym
        - ./php-fpm/php.ini:/usr/local/etc/php/php.ini
    depends_on:
        - mysql
web:
    build: ./nginx
    ports:
        - "8888:80"
    volumes:
        - ./iym:/var/www/iym
        - ./nginx/iym.conf:/etc/nginx/conf.d/default.conf
    depends_on:
        - php
mysql:
    image: mysql:5.6
    restart: always
    command: --default-authentication-plugin=mysql_native_password
    volumes:
        - ${DB_PATH_HOST}:/var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: "symf0ny"
    ports:
        - "3306:3306"

А вот мой DATABASE_URL в .env file

DATABASE_URL=mysql://root:symf0ny@127.0.0.1:3306/iym

Когда я пытаюсь запустить php bin/console doctrine:database:create, я получаю сообщение об ошибке типа "SQLSTATE[HY000] [2002] Connection refused".ОС - Ubuntu 18.04.Что я должен сделать, чтобы подключиться к БД?Большое спасибо!

1 Ответ

0 голосов
/ 05 февраля 2019

Я предполагаю, что вы пытаетесь подключиться из другого контейнера / сервиса, определенного в docker-compose, и используете текущую версию docker-compose (2.4 или 3.7)

Вам необходимоизменить

DATABASE_URL=mysql://root:symf0ny@127.0.0.1:3306/iym

на

DATABASE_URL=mysql://root:symf0ny@mysql:3306/iym

Причина в том, что 127.0.0.1 ссылается на локальный хост машины, на которой работает php.В данном случае это контейнер php localhost.Но БД там не бегает.Он запускается в другом док-контейнере, доступ к которому можно получить под именем службы, в данном случае mysql.


В Docker-Compose для сетевых документов написано :

По умолчанию Compose устанавливает единую сеть для вашего приложения.Каждый контейнер для службы присоединяется к сети по умолчанию и доступен для других контейнеров в этой сети и может быть обнаружен ими с именем хоста, идентичным имени контейнера.

, но услуга обнаруживается в соответствии симя контейнера (которое автоматически генерируется в projectName_serviceName_1 (имя проекта начинается с имени папки по умолчанию), но также и под именем службы, ссылка и псевдоним службы , если определено. Я бы рекомендовал использоватьимя службы везде, где это возможно.

Больше документов: https://docs.docker.com/compose/networking/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...