Symfony docker容器无法连接到Mysql

时间:2016-04-04 19:26:52

标签: php mysql symfony docker

我的堆栈很常见,一个用于我的Symfony应用程序的容器,另一个用于Mysql。 由于某种原因,Symfony无法连接到Mysql容器,并出现以下错误:

  

致命错误:带有消息'SQLSTATE [HY000] [2002]的未捕获异常'PDOException'无法通过套接字连接到本地MySQL服务器'/var/run/mysqld/mysqld.sock'

用于测试MySQL连接的简单php文件,在Symfony容器上使用此

<?php
$dbh = new PDO('mysql:host=database;dbname=mysite', 'mysite', 'password');

这是我的Symfony参数文件:

database_driver: pdo_mysql
database_host: database
database_port: 3306
database_name: mysite
database_user: mysite
database_password: password

这是我的docker-compose文件:

site:
  build: webapp
  ports :
     - "80:80"
  volumes:
     - /home/myuser/dev/mysite:/var/www/html/
  links:
     - database

database:
  image: mysql:5.5
  ports:
    - "3306:3306"  
  environment:
    - MYSQL_ROOT_PASSWORD=password
    - MYSQL_DATABASE=mysite
    - MYSQL_USER=mysite
    - MYSQL_PASSWORD=password

我还尝试了一个没有错误的新Symfony项目。

1 个答案:

答案 0 :(得分:0)

删除要使用的数据库驱动程序和端口。由于您没有使用端口转发,因此您无需为MySQL指定端口。此外,您的驱动程序出现了错误,不仅仅是pdo而是pdo_mysqldocumentation)。

database_host: database
database_name: mysite
database_user: mysite
database_password: password

另外,为什么要指定database_path? MySQL不需要,因为你通过TCP / IP调用它。旧的SQLite数据库?

您还可以查看config.yml文件:

# Doctrine Configuration
doctrine:
    dbal:
        driver:   pdo_mysql
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
        # if using pdo_sqlite as your database driver:
        #   1. add the path in parameters.yml
        #     e.g. database_path: "%kernel.root_dir%/data/data.db3"
        #   2. Uncomment database_path in parameters.yml.dist
        #   3. Uncomment next line:
        #     path:     "%database_path%"

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true