Php 带有Docker容器的Symfony 5数据库URL
我为Php 带有Docker容器的Symfony 5数据库URL,php,docker,symfony,Php,Docker,Symfony,我为LEMP本地服务器创建了一个docker配置。我尝试将Symfony应用程序与MySQL数据库版本8连接,但连接被拒绝 错误:SQLSTATE[HY000][2002]连接被拒绝。 问题在于Symfony 5所需的.env文件中的数据库URL。 对于给定的docker compose.yml配置,DATABASE\u URL的正确值是多少?我在Docker for Windows上运行这个。我能够使用用户名root和root密码连接到mysql bash docker compose.yml
LEMP
本地服务器创建了一个docker配置。我尝试将Symfony应用程序与MySQL数据库版本8连接,但连接被拒绝
错误:SQLSTATE[HY000][2002]连接被拒绝。
问题在于Symfony 5所需的.env
文件中的数据库URL
。
对于给定的docker compose.yml
配置,DATABASE\u URL
的正确值是多少?我在Docker for Windows上运行这个。我能够使用用户名root
和root
密码连接到mysql bash
docker compose.yml
:
###############################################################################
# Generated on phpdocker.io #
###############################################################################
version: "3.1"
services:
memcached:
image: memcached:alpine
container_name: sampleapp-memcached
mailhog:
image: mailhog/mailhog:latest
container_name: sampleapp-mailhog
ports:
- "8001:8025"
redis:
image: redis:alpine
container_name: sampleapp-redis
mysql:
image: mysql:8.0
container_name: sampleapp-mysql
working_dir: /app
volumes:
- .:/app
environment:
- MYSQL_ROOT_PASSWORD=Ur7HJWzZ2QK9
- MYSQL_DATABASE=maindatabase
- MYSQL_USER=sampleuser
- MYSQL_PASSWORD=FxGBWfJ86ykq
ports:
- "8002:3306"
elasticsearch:
image: elasticsearch:6.5.4
container_name: sampleapp-elasticsearch
webserver:
image: nginx:alpine
container_name: sampleapp-webserver
working_dir: /app
volumes:
- .:/app
- ./phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- "8000:80"
php-fpm:
build: phpdocker/php-fpm
container_name: sampleapp-php-fpm
working_dir: /app
volumes:
- .:/app
- ./phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/7.4/fpm/conf.d/99-overrides.ini
通常,数据库URL字符串是标准字符串:
mysql://user:pwd@host:port/db
在这种情况下:
DATABASE_URL=mysql://sampleuser:FxGBWfJ86ykq@127.0.0.1:8002/maindatabase
将它放在.env.local文件中,它应该可以工作。但是请注意,我在unix上工作,附近没有Windows计算机
使现代化
按照Alexander的建议,如果您正在容器中运行Symfony应用程序(对不起,我没有注意到您的Web服务器容器),那么您应该将字符串更改为
DATABASE_URL=mysql://sampleuser:FxGBWfJ86ykq@mysql:3306/maindatabase
但是,请注意,对于容器到容器的通信,您应该使用默认端口(或公开一个新端口)。
关于设置serverVersion,您可以使用查询参数,或者(更好的方法是IMHO)在doctor.yaml配置文件中设置它。此外,请注意,您的服务器版本应该与您在docker compose文件中指定的版本相匹配。请共享当前配置-当MySQL本身抛出该错误消息时,连接在技术上是可能的,但由于权限问题而失败修复了语法,并格式化了一些单词。您几乎是对的。正确的DSN是:
数据库\u URL=mysql://sampleuser:FxGBWfJ86ykq@mysql:8002/maindatabase?服务器版本=5.7
。不是mysql它取代了127.0.0.1,因为它应该连接到mysql容器,127.0.0.1指的是它自己的容器。谢谢你的评论,你是对的!但是,对于容器到容器的通信,应该使用默认端口,对吗?而且,服务器版本应该与docker compose文件中指定的版本匹配。我说得对吗?顺便说一下,我已经更新了答案,让我知道。关于端口,没有。在他的例子中,他映射了端口8002,所以他可以使用端口8002。这就是映射端口的目的。关于服务器版本,您可以使用DSN/中的查询参数,请记住这与DNS不同。DSN代表数据源名称。