Docker中的Symfony 3 – 奇怪的连接拒绝错误
在Symfony 3项目上工作。
我所有关于数据库工作的CLI原则的突击队员,如:
doctrine:database:create
或doctrine: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
更方便,对我来说,将是第二种方法,因为你不必改变数据库参数…