mysql Docker中的Symfony 3- Weird Connection Refused错误

9njqaruj  于 2023-08-02  发布在  Mysql
关注(0)|答案(2)|浏览(106)

Symfony 3项目
我所有关于数据库工作的CLI原则突击队,如:
doctrine:database:createdoctrine:schema:update --force
奇怪的是,我试图在我的控制器方法中从我的存储库中获取一些数据,但是当我试图在浏览器中导航到有问题的页面时,我似乎在Connection refused错误上反弹。
下面是一些配置:

config.yml部分

doctrine:
    dbal:
        driver:   pdo_mysql
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  utf8mb4
        default_table_options:
          charset: utf8mb4
          collate: utf8mb4_unicode_ci

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true

字符串

参数.yml

parameters:
    database_host: 127.0.0.1
    database_port: 3306
    database_name: db_name
    database_user: db_user
    database_password: db_pw

控制器

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DefaultController extends Controller
{
/**
 * @Route("/", name="homepage")
 */
public function indexAction()
{
    return $this->render('default/index.html.twig');
}

/**
 * @Route("/roedel", name="roedel")
 */
public function roedelAction()
{
    return $this->render('default/roedel.html.twig');
}

/**
 * @Route("/territorium", name="territorium")
 */
public function territoriumAction()
{
    return $this->render('default/territorium.html.twig');
}

/**
 * @Route("/dejacht", name="jacht")
 */
public function jachtAction()
{
    $artists = $this->getDoctrine()
        ->getRepository('AppBundle:Artist')
        ->findAll();

    return $this->render('default/jacht.html.twig', [
        'artists' => $artists
    ]);
}
}


额外信息:

  • 使用docker作为测试用例,尽管我不确定这是否重要,因为CLI命令行命令确实可以工作。
j2qf4p5b

j2qf4p5b1#

当你试图对在docker容器中运行的MySQL运行Symfony的控制台命令时,有两种可能的情况。

从本地机器运行symfony命令,例如Mac、Windows等- 然后DB主机必须是你的docker机器IP(通常是192.168.99.100,但取决于你的配置),并且你必须为mysql容器正确Map端口3306-更多关于端口Map的信息https://docs.docker.com/compose/compose-file/#/ports。
您从“web app”容器运行symfony命令-然后DB主机设置为mysql,并且您必须在“web app”和mysql容器之间正确配置网络-更多关于网络的信息https://docs.docker.com/compose/compose-file/#/networks

对我来说,更方便的是第二种方法,因为你不必改变DB参数……

xdyibdwo

xdyibdwo2#

你只需要在config.yml中添加你的MySQL服务器

doctrine:
dbal:
    driver:   pdo_mysql
    host:     "%database_host%"
    port:     "%database_port%"
    dbname:   "%database_name%"
    user:     "%database_user%"
    password: "%database_password%"
    charset:  UTF8
    server_version: 5.7.42

字符串
并手动删除该高速缓存存储库/设备

相关问题