Php Symfony docker集装箱罐';t连接到Mysql

Php Symfony docker集装箱罐';t连接到Mysql,php,mysql,symfony,docker,Php,Mysql,Symfony,Docker,我的堆栈非常常见,一个用于Symfony应用程序的容器,另一个用于Mysql。 由于某些原因,Symfony无法连接到Mysql容器,出现以下错误: 致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[HY000][2002]无法通过套接字连接到本地MySQL服务器”/var/run/mysqld/mysqld.sock” Symfony容器上用于测试MySQL连接的一个简单php文件可用于 <?php $dbh = new PDO('mysql:host=data

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

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

Symfony容器上用于测试MySQL连接的一个简单php文件可用于

<?php
$dbh = new PDO('mysql:host=database;dbname=mysite', 'mysite', 'password');
这是我的docker撰写文件:

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项目,没有出现错误。

删除要使用的数据库驱动程序和端口。由于没有使用端口转发,因此不必为MySQL指定端口。另外,您的驱动程序中有一个错误,它不仅是
pdo
,而且是
pdo_-mysql
()

另外,为什么要指定
数据库路径
?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

删除要使用的数据库驱动程序和端口。由于没有使用端口转发,因此不必为MySQL指定端口。另外,您的驱动程序中有一个错误,它不仅是
pdo
,而且是
pdo_-mysql
()

另外,为什么要指定
数据库路径
?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

仔细检查两种环境的配置/参数文件。它似乎忽略了您的参数(尝试在本地连接),我不这么认为,因为错误消息包含登录参数,并且随着我更改参数文件而更新。PDO->_构造('mysql:dbname=my…','mysite','password')我找到了这个答案,它建议在
mysql:
host
之间加一个空格;我已经在它们之间有了一个空格。好吧,我发现了我的错误,我的会话处理程序配置不好。亲爱的Stackoverflow专家,我应该编辑问题还是回答问题?请仔细检查这两种环境的配置/参数文件。它似乎忽略了您的参数(尝试在本地连接),我不这么认为,因为错误消息包含登录参数,并且随着我更改参数文件而更新。PDO->_构造('mysql:dbname=my…','mysite','password')我找到了这个答案,它建议在
mysql:
host
之间加一个空格;我已经在它们之间有了一个空格。好吧,我发现了我的错误,我的会话处理程序配置不好。亲爱的Stackoverflow大师,我应该编辑我的问题还是回答它?我在这里包括了我的驱动程序的一个输入错误,但我的实际参数文件很好。我试图删除驱动程序和端口,但仍然是相同的消息。当我有更多的时间时,我会尝试一个新的Symfony项目。我在我的驱动程序中包括了一个输入错误,但我的实际参数文件是好的。我试图删除驱动程序和端口,但仍然是相同的消息。我会尝试一个新的Symfony项目,当我有更多的时间。
# 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