Docker中的Symfony 3 – 奇怪的连接拒绝错误

在Symfony 3项目上工作。

我所有关于数据库工作的CLI原则的突击队员,如:

doctrine:database:createdoctrine:schema:update --force

奇怪的是,我试图在我的控制器方法中从我的存储库中获取一些数据,但是当我尝试在浏览器中导航到有问题的页面时,似乎在连接拒绝错误中弹跳。

在一些configuration下:

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 

parameters.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作为这是一个testing用例,但我不知道这是否应该重要,因为对于教条的CLI突击队确实工作。

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

你可以从本地机器上运行一个symfony命令 ,例如Mac,Windows等等 – 然后数据库主机必须是你的docker机器IP(通常是192.168.99.100 ,但是取决于你的configuration),你必须正确地映射端口3306为mysql容器 – 更多关于端口映射https://docs.docker.com/compose/compose-file/#/ports

您从“web应用程序”容器运行symfony命令 – 然后数据库主机设置为mysql ,并且必须正确configuration“web应用程序”和mysql容器之间的networking – 更多关于networkinghttps://docs.docker的.com /组成/构成文件/#/networking

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