2017-10-19 18 views
0

私はSymfonyでシーズンされていますが、ドッカーにとってはまったく新しく、「接続が拒否されました」というエラーがあります。これは、その別のプロジェクトから基づいているSymfony + Docker、接続が拒否されました

version: '3.2' 

services: 
    cg-demo: 
     build: docker/cg-demo 
     container_name: cg-demo 
     working_dir: /var/www/html 
     volumes: 
      - .:/var/www/html 
      - ./docker/demo/vhost.conf:/etc/apache2/sites-available/000-default.conf:ro 
      - ./docker/demo/php.ini:/usr/local/etc/php/php.ini:ro 
      - ~/.ssh:/var/www/.ssh 
      - ~/.composer:/var/www/.composer 
     environment: 
      - SYMFONY_ENV 
      - DOMAIN_NAME: cg-demo.docker 
      - VIRTUAL_HOST: cg-demo.docker 
     depends_on: 
      - database 
     env_file: .env 
     ports: 
      - 8000:80 

    database: 
     image: percona:5.6 
     ports: 
      - 3306:3306 
     expose: 
      - 3306 
     container_name: cg-demo-database 
     volumes: 
      - /docker/database:/etc/mysql/conf.d 
     environment: 
      MYSQL_ROOT_PASSWORD: root 
      MYSQL_DATABASE: demo 
     tmpfs: 
      - /var/lib/mysql 
      - /tmpfs:size=300M 

:ここ

は私docker-composeファイルの内容である

それは初心者のエラーであり、ここでのソリューションは非常に簡単であることかなり確信して...動作していますが、私はここで起こっていることはすべてわかりません...

私はまた、ここに示していないphpmyadminコンテナを持っています。 PhpMyAdminはデータベースに正しく接続し、Webサーバーの問題なく使用できます。それはsymfonyのコンテナに来るとき、データベースを使用しようとしたときにしかし、私はこれを持っている:

[Doctrine\DBAL\Exception\ConnectionException] 
An exception occured in driver: SQLSTATE[HY000] [2002] Connection refused 

[Doctrine\DBAL\Driver\PDOException] 
SQLSTATE[HY000] [2002] Connection refused 

[PDOException] 
SQLSTATE[HY000] [2002] Connection refused 

接続情報は.envファイルに、以下の通りです:docker psを呼び出す

# Database credentials 
DATABASE_HOST=database 
DATABASE_PORT=3306 
DATABASE_USER=root 
DATABASE_PASSWORD=root 
DATABASE_DB=cg-demo 

は私にこれを提供します:

CONTAINER ID  IMAGE     COMMAND    
CREATED    STATUS     PORTS     NAMES 
16a67dadeebb  phpmyadmin/phpmyadmin "/run.sh phpmyadmin"  15 minutes ago  Up 15 minutes    0.0.0.0:8001->80/tcp cg.phpmyadmin.docker 
8bd783aa1dd1  cg_cg-demo   "entrypoint.sh apa..." 15 minutes ago  Up 15 minutes    0.0.0.0:8000->80/tcp cg-demo 
2fc7cd9105ba  percona:5.6   "docker-entrypoint..." 15 minutes ago  Up 15 minutes (healthy) 3306/tcp    cg-database 
私はデモコンテナから ping databaseしようとしましたし、それが動作

...

EDIT 1:

ports: 
    - 3306:3306 

編集2:すべての容器から後に除去

networks: 
    - default 

データベース容器に以下を追加しましたEDIT 3:

app/config/config.ymlで私の教義構成:

dbal: 
    host:  "%env(DATABASE_HOST)%" 
    port:  "%env(DATABASE_PORT)%" 
    dbname: "%env(DATABASE_DB)%" 
    user:  "%env(DATABASE_USER)%" 
    password: "%env(DATABASE_PASSWORD)%" 
    charset: UTF8 
    mapping_types: 
     enum: string 
    server_version: 5.6 

EDIT 4:

は、データベース構成に次を追加しました:

expose: 
    - 3306 
+0

は、あなたがあなたのフィードバックのための 'CG-demo'サービス –

+0

おかげで行ったようにMySQLのポートを公開する必要があります。ポストは – Zephyr

+0

もう一つは、私は同様の問題を持っていた(現在でも動作しない)更新され、私はサービスから 'networks'属性を削除し、それが –

答えて

0

をあなたが公開する必要がありますドッカーの内部ネットワーク上のポート(expose:経由) (ports:を介して)ホストに接続するだけでなく、別のコンテナに接続できるようにすることができます。

pingは正常ですが、明示的に公開しないと、ポート(つまり、あなたの場合は3306)がドッカーのファイアウォールによってブロックされています。

はあなたのコン・ファイルに次の行を追加します

services: mysql: 
    # [..] 
    expose: 
     - 3306 

さらにMySQLはALLネットワークデバイス上でリッスンしていることを確認してください。デフォルト(少なくともUbuntuでは)は、localhost、akaだけで聞くことです。ループバックインターフェイス(127.0.0.1)。 MySQLの設定には次の行が必要です。

bind-address=0.0.0.0 
+0

ありがとうございます!まだ動作しません。私は 'bind-address'節をmysql confに追加し、' expose'を無駄にしました。 – Zephyr

関連する問題