繁体   English   中英

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

[英]Symfony 4 “Connection refused” while trying to connect to docker mysql container

我的问题是如何配置与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。 我该怎么做才能连接到DB? 非常感谢!

我假设您正在尝试从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网络文档中写道:

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

但是,该服务可以在容器名称下自动生成(它自动生成到projectName_serviceName_1 (项目名称以默认文件夹名称开头),但也可以在服务名称, 链接服务别名下定义。我建议尽可能使用服务名称。

更多文档: https//docs.docker.com/compose/networking/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM