Исключение произошло в драйвере: SQLSTATE[HY000] [2002] Отказано в подключении к Symfony Docker

#mysql #database #docker #symfony #doctrine

#mysql #База данных #docker #symfony #доктрина

Вопрос:

По какой-то причине, когда я создаю функцию, это создает новую статью. Я получаю эту ошибку:

 An exception occurred in driver: SQLSTATE[HY000] [2002] Connection refused
 

Но когда я запускаю, например:

 > php bin/console doctrine:migrations:migrate
 

Соединение, похоже, работает. Возможно, есть какая-то проблема с моими изображениями docker. Вот контроллер с функцией создания

   /**
 * @param Request $request
 * @return Response
 * @Route("article/create", name="app_article_create")
 */
public function createArticleForm(Request $request) : Response
{
    $article = new Article();

    $createArticleForm = $this->createForm(ArticleType::class, $article);
    $createArticleForm->handleRequest($request);
    if ($createArticleForm->isSubmitted()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($article);
        $em->flush();
        return $this->redirectToRoute('app_home_page');
    }
    return $this->render('newArticle.html.twig', ['createArticleForm' => $createArticleForm->createView()]);
}
 

Вот мой DATABSE_URL в файле .env для symfony:

  DATABASE_URL="mysql://appuser:apppassword@127.0.0.1:3306/symfonyBlogDB?serverVersion=mariadb-5.7"
 

Мой docker-compose.yml

 services:
 database:
  build:
   context: ./database
  environment:
   - MYSQL_DATABASE=${DATABASE_NAME}
   - MYSQL_USER=${DATABASE_USER}
   - MYSQL_PASSWORD=${DATABASE_PASSWORD}
   - MYSQL_ROOT_PASSWORD=${DATABASE_ROOT_PASSWORD}
  ports:
   - "3306:3306"
 volumes:
   - ./database/init.sql:/docker-entrypoint-initdb.d/init.sql
   -  ./database/data:/var/lib/mysql
 

И мой файл .env для docker

 DATABASE_NAME=symfonyBlogDB
DATABASE_USER=appuser
DATABASE_PASSWORD=apppassword
DATABASE_ROOT_PASSWORD=root
 

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

1. Попробуйте это: DATABASE_URL=»mysql://appuser:apppassword@database/symfonyBlogDB?serverVersion=mariadb-5.7 » где database — это имя вашей службы базы данных

Ответ №1:

Проблема была в docker-compose.yml . Вместо того, чтобы использовать адрес локального хоста, я должен изменить его на database , который является именем моей службы базы данных. Большое спасибо за помощь.