2016-07-08 15 views
2

私はLaravelアプリケーションをMySQLで使用しています.Docker-composeを使用してDockerで実行しようとしています。アプリはDBに接続しようとする場合でも、それはスロー:Connector.php線55でdocker-composeの "ローカルMySQLサーバに接続できません"

PDOExceptionを:SQLSTATE [HY000] [2002] /「の/ var /実行/ mysqldのソケットを介してローカルのMySQLサーバーに接続できませんmysqld.sock」(2)

マイドッキングウィンドウ-compose.yml:

load_balancer: 
image: tutum/haproxy 
links: 
    - web 
ports: 
    - "80:80" 

cache: 
    image: redis 

db: 
    image: mysql 
    environment: 
     MYSQL_ROOT_PASSWORD: Q1w2e3r4t5 
     MYSQL_DATABASE: regappbase 

web: 
    image: andrewmclagan/nginx-hhvm 
    links: 
     - db 
     - cache 
    volumes: 
     - ./:/var/www 
    environment: 
     - APP_ENV=local 
     - DB_DATABASE=regappbase 
     - DB_PASSWORD=Q1w2e3r4t5 
     - VIRTUAL_HOST=laravel.local 

マイ.env:

APP_ENV=production 
APP_DEBUG=true 
APP_KEY=SomeRandomString 
APP_URL=http://laravel.local 

DB_CONNECTION=mysql 
DB_HOST=localhost 
DB_PORT=3306 
DB_DATABASE=regappbase 
DB_USERNAME=root 
DB_PASSWORD=Q1w2e3r4t5 

CACHE_DRIVER=file 
SESSION_DRIVER=file 
QUEUE_DRIVER=sync 

REDIS_HOST=laravel.local 
REDIS_PASSWORD=null 
REDIS_PORT=6379 

MAIL_DRIVER=smtp 
MAIL_HOST=mailtrap.io 
MAIL_PORT=2525 

答えて

1

"localhost"へのMysql接続は、デフォルトでローカルマシン上のソケットを介して接続しようとします。あなたのDB_HOSTはリンクされたコンテナ名 "db"でなければなりません。 MYSQL docsから

:Unixでは

、MySQLプログラムは、あなたが他のネットワークベースのプログラムに比べて期待していたものとそう違う方法で、localhostを特別にホスト名を扱います。 localhostへの接続の場合、MySQLプログラムはUnixソケットファイルを使用してローカルサーバに接続しようとします。これはポート番号を指定するために--portまたは-Pオプションが指定されていても発生します。クライアントがローカルサーバーとのTCP/IP接続を確立するには、--hostまたは-hを使用して、ホスト名の値127.0.0.1、またはローカルサーバーのIPアドレスまたは名前を指定します。また、--protocol = TCPオプションを使用して、localhostの場合でも明示的に接続プロトコルを指定することができます。たとえば、次のように

+0

それは私の作品!ありがとうございました! – Olga

+1

どのようにDB_HOSTを 'db'にリンクしますか? –

0

あなたは.envにはlocalhostにIP DB_HOSTを変更することができます。 のIP MySQLのドッキングウィンドウコンテナを受け取るために は、コマンドを書く必要があります。

docker exec -it <CONTAINER_ID> ip add show eth0 
+0

DB_HOSTでその出力のどの部分を使用しますか? – MikeiLL

関連する問題