docker-compose mysql Доступ запрещен для пользователя symfony @’172.18.0.1′

#php #docker #docker-compose #mariadb #symfony4

#php #docker #docker-compose #mariadb #symfony4

Вопрос:

У меня проблема с базой данных при запуске Symfony4 проекта.

docker-compose.yml

 db:
    environment:
      MYSQL_DATABASE: ${DATABASE_NAME}
      MYSQL_PASSWORD: ${DATABASE_PASSWORD}
      MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
      MYSQL_USER: ${DATABASE_USERNAME}
    image: 'mariadb/server:10.4'
    ports:
      - '3306:3306'
    volumes:
      - 'db-data:/var/lib/mysql'
  

.env

 DATABASE_URL=mysql://symfony:symfony@db.localhost/symfony
###< doctrine/doctrine-bundle ###
DB_HOST=db.localhost
DB_NAME=symfony
DB_USERNAME=symfony
DB_PASSWORD=symfony
DATABASE_PORT=3306
DATABASE_HOST=db.localhost
DATABASE_USERNAME=symfony
DATABASE_PASSWORD=symfony
DATABASE_NAME=symfony
DATABASE_PORT=3306
PROJECT_NAME=oversight-api
  

Я получил ошибку Access denied for user symfony@172.18.0.1
Я не уверен, что 172.18.0.1 . Должен ли я добавить db.localhost в /etc/hosts ?

Как решить эту проблему?

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

1. Когда вы запускаете docker, он создает свою собственную сеть, 172.18.0.0 — это сеть, которую он создал для уровня docker. это позволяет вам пинговать docker-container2, когда вы сидите на docker-container1, не зная IP-адреса. Я думаю, очевидным вопросом было бы, вы создали пользователя symfony в контейнере MySQL и предоставили ему разрешение на доступ к базе данных?

2. @user1628449 Я ничего не делал, включая добавление symfony пользователя. Я только что выполнил docker-compose up -d

3. @user1628449 это неправда. Контейнер настраивается с помощью переменных среды. В частности, пользователь, созданный с помощью переменных среды, является суперпользователем. Я смог развернуть контейнер локально с точной заданной конфигурацией.

Ответ №1:

Если вы используете Mac, вы можете разрешить URL базы данных с помощью host.docker.internal . В другой ОС вы можете назвать свой контейнер с помощью container_name: my_db в docker_compose.yaml и использование my_db в качестве хоста

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

1. Я использую Ubuntu

2. попробуйте назвать контейнер в этом случае, он должен разрешить IP сам по себе

Ответ №2:

Вместо подключения к 172.18.0.1 , мы можем подключиться к localhost . Мы перенаправили порт контейнера 3306 на порт локальной машины 3306 , таким образом, порт доступен через localhost .


Если docker-host является удаленной машиной, и мы хотим подключиться к контейнеру, запущенному на удаленной машине, нам нужно подключиться к сетевому адресу удаленной машины или DNS-имени (это имя / адрес в физической сети, а не во внутренней сети docker. По сути, адрес, который мы использовали бы для подключения к компьютеру по ssh).


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