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

时间:2019-02-04 21:06:33

标签: php symfony symfony4

我的问题是如何配置与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"

这是我的 .env 文件中的DATABASE_URL

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

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

1 个答案:

答案 0 :(得分:3)

我假设您正在尝试从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的计算机的本地主机。在这种情况下,它是php的容器localhost。但是数据库不在那儿运行。它在另一个Docker容器中运行,在这种情况下,可以使用服务名称mysql进行访问。


docker-compose networking docs中写道:

  

默认情况下,Compose为您的应用设置单个网络。服务的每个容器都加入默认网络,并且都可以被该网络上的其他容器访问,并且可以在与容器名称相同的主机名下被发现。

但是,可以在容器名称(容器名称自动生成为projectName_serviceName_1(项目名称以默认文件夹名称开头)下发现服务,也可以在服务名称link和{{3}下发现服务}(如果已定义)。我建议尽可能使用服务名称。

更多文档:service alias