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代表数据源名称。