2017-02-16 24 views
0

處理Symfony 3項目。Docker中的Symfony 3 - 怪異連接拒絕錯誤

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

古怪的是,我試圖讓我的控制器方法從我的倉庫的一些數據,但我似乎:關於數據庫的工作,像

我所有的CLI學說突擊隊當我嘗試在瀏覽器中導航到有問題的頁面時,拒絕Connection refused錯誤。

下面一些CONFIGS:

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 
    ]); 
} 
} 

額外信息:

  • 使用泊塢窗,因爲這是一個TestCase,雖然我不知道這是否應該重要,因爲CLI突擊隊教義做的工作。
+0

你執行學說從泊塢窗命令行(如SSH)CLI命令,或在你的操作系統的命令行中(例如PowerShell)?如果後面的,因爲docker是一個虛擬機,所以當你在docker中運行你的應用程序時,它會嘗試從'127.0.0.1'(又名localhost)的Docker配置中訪問mysql服務器,而不是託管操作系統。爲了簡化:請詳細說明安裝/配置mysql的位置。 – fyrye

+0

@fyrye我明白你要去的地方。我正在從我的操作系統命令行執行doctrine CLI命令。 MySQL容器確實運行在不同的容器中(在端口3306上)。這可能意味着我應該更改憑據? – wesvb

+0

您應該在docker中安裝/配置mysql服務器,並且通過SSH或docker容器從您的OS中執行命令行命令。將docker轉到您的應用程序主機中。這將允許您在託管操作系統崩潰/格式時部署泊塢窗,或者與其他開發人員共享。否則,您需要配置一個讓docker與主機操作系統的mysql配置進行通信的方法。請參閱:https://hub.docker.com/r/mysql/mysql-server/在docker上配置mysql將最好地模擬如何在外部服務器上部署應用程序。 – fyrye

回答

1

當您嘗試運行鍼對Docker容器內運行的MySQL的Symfony控制檯命令時,有兩種可能的方案。

您可以從本地機器運行symfony命令,例如, Mac,Windows等 - 然後數據庫主機必須是您的碼頭機IP(通常爲192.168.99.100,但取決於您的配置),並且必須正確映射mysql容器的端口3306 - 有關端口映射https://docs.docker.com/compose/compose-file/#/ports的更多信息。

您從「Web應用程序」容器一個symfony的命令 - 那麼數據庫主機設置爲mysql,和你有「Web應用程序」和mysql容器之間已經正確配置的網絡 - 更多關於網絡https://docs.docker.com/compose/compose-file/#/networks

更方便,對我來說,將是第二種方法,因爲你沒有改變DB參數...

+0

儘管沒有使用碼頭機,但第一個選項似乎對我來說最合適。謝謝,清理了很多:) – wesvb