2017-02-16 15 views
0

Symfony 3プロジェクトで作業しています。DockerのSymfony 3 - 奇妙な接続が拒否されたエラー

データベース作業に関わるすべての私のCLIの教義の部隊、のように:変なふうに十分

doctrine:database:createまたはdoctrine:schema:update --force

、私は私のコントローラメソッドで私のリポジトリからいくつかのデータを取得しようとしているが、私はそこに見えます私のブラウザで問題のページに移動しようとするとConnectionが拒否したエラーでバウンスする。いくつかの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 
    ]); 
} 
} 

追加情報:

  • 教義のためのCLIの部隊は、作業を行うので、これは重要でなければならない場合、私はわからないけれども、これは、テストケースであるとして、ドッキングウィンドウを使用しました。
+0

...、第二のアプローチになりますが、CLIは、ドッキングウィンドウのコマンドライン(例えばSSH)からのコマンド教義を実行する、またはされていますあなたのオペレーティングシステムのコマンドライン(例えば、powershell)内で?後でドッカーが仮想マシンであるため、ドッカー内でアプリケーションを実行すると、ホスティングオペレーティングシステムではなく '127.0.0.1'(別名localhost)のドッカー設定からmysqlサーバにアクセスしようとします。簡略化する:mysqlがインストールされている/設定されている場所を詳細に記述してください。 – fyrye

+0

@fyryeどこに行くのか分かります。私は私のOSのコマンドラインからdoctrine CLIコマンドを実行しています。 MySQLコンテナは実際には別のコンテナ(ポート3306)で動作しています。これはおそらく私が資格情報を変更する必要があることを意味します – wesvb

+0

dockerにmysqlサーバをインストール/設定し、コマンドラインコマンドを実行するにはSSHまたはドッカーコンテナ経由でOS内のリモートにインストールする必要があります。ドッカーをアプリケーションホストに変える。これにより、ホスティングOSのクラッシュ/フォーマットが必要な場合にドッカーを導入したり、別の開発者と共有したりすることができます。それ以外の場合は、ドッカーがホストOSのmysql設定と通信する手段を設定する必要があります。以下を参照してください:https://hub.docker.com/r/mysql/mysql-server/ dockerでmysqlを設定すると、外部サーバにあなたのアプリケーションをどのように展開するのかが分かります。 – fyrye

答えて

1

ドッカーコンテナ内で実行されるMySQLに対してSymfonyのコンソールコマンドを実行しようとすると、2つのシナリオが考えられます。

ローカルマシンからsymfonyコマンドを実行します。。 Mac、Windowsなど - DBホストはあなたのドッカーマシンのIP(通常は192.168.99.100ですが、あなたの設定に依存しています)とポートマッピングhttps://docs.docker.com/compose/compose-file/#/portsの詳細についてはmysqlコンテナ用のポート3306を正しくマッピングしていなければなりません。

あなたが「ウェブアプリ」コンテナからsymfonyのコマンドを実行します - そして、DBホストがmysqlに設定し、あなたが「ウェブアプリ」とMySQLのコンテナ間の適切に構成されたネットワークを持っている必要がありますされて - ネットワークhttps://docs.docker.com/compose/compose-file/#/networks詳細

もっと便利に、私のために、あなたがDBのパラメータを変更する必要はありませんので

+0

最初のオプションは、ドッカーマシンを使用していないにもかかわらず、私にとって最も適しているようです。おかげで、多くのことをクリア:) – wesvb

関連する問題