Symfony 4在尝试连接到Docker mysql容器时“连接被拒绝”

p8h8hvxi  于 2023-02-09  发布在  Docker
关注(0)|答案(2)|浏览(175)

我的问题是如何配置到mysql容器的连接。
这是我的docker-compose.yml

version: '3'
services:
php:
    build: ./php-fpm
    volumes:
        - ./iym:/var/www/iym
        - ./php-fpm/php.ini:/usr/local/etc/php/php.ini
    depends_on:
        - mysql
web:
    build: ./nginx
    ports:
        - "8888:80"
    volumes:
        - ./iym:/var/www/iym
        - ./nginx/iym.conf:/etc/nginx/conf.d/default.conf
    depends_on:
        - php
mysql:
    image: mysql:5.6
    restart: always
    command: --default-authentication-plugin=mysql_native_password
    volumes:
        - ${DB_PATH_HOST}:/var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: "symf0ny"
    ports:
        - "3306:3306"

这是我的DATABASE_URL,位于**.env**文件中

DATABASE_URL=mysql://root:symf0ny@127.0.0.1:3306/iym

当我尝试运行php bin/console doctrine:database:create时,我得到了一个类似“SQLSTATE[HY000] [2002] Connection refused“的错误。操作系统-ubuntu18.04。我应该怎么做才能连接到数据库?非常感谢!

kmpatx3s

kmpatx3s1#

  • 我假设您正在尝试从Docker-compose中定义的另一个容器/服务进行连接,并且您正在使用当前版本的Docker-compose(2.4或3.7)*

你需要改变

DATABASE_URL=mysql://root:symf0ny@127.0.0.1:3306/iym

DATABASE_URL=mysql://root:symf0ny@mysql:3306/iym

原因是127.0.0.1引用的是php所在机器的localhost,在本例中是php的容器localhost,但db不在本地主机上运行,它运行在另一个docker容器中,可以通过服务名mysql访问到该容器。
docker-compose networking docs中写入:
默认情况下,"合成"会为您的应用设置单个网络。服务的每个容器都加入默认网络,并且该网络上的其他容器都可以访问,并且这些容器可以在与容器名称相同的主机名处发现。
但是,服务可以在容器名称下发现(容器名称自动生成为projectName_serviceName_1(项目名称以默认文件夹名称开始),但也可以在服务名称、链接和服务别名(如果定义)下发现。我建议尽可能使用服务名称。
更多文档:https://docs.docker.com/compose/networking/

6yjfywim

6yjfywim2#

在我的例子中,Docker变量覆盖了.env文件中的参数,我尝试连接到错误的主机。通过Doctrine\DBAL\Driver\PDO\MySQL\Driver::connect中的dd($this->constructPdoDsn($params))发现,可能会有帮助

相关问题