我的堆栈很常见,一个容器用于我的Symfony应用程序,另一个用于Mysql。由于某些原因,Symfony无法连接到Mysql容器,出现以下错误:
致命错误:未捕获异常"PDOException",消息为"SQLSTATE[HY000][2002]无法通过套接字"/var/run/mysqld/mysqld.sock"连接到本地MySQL服务器
一个简单的php文件,用于测试MySQL连接,在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撰写文件:
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
(文档)。
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