Symfony的4“连接被拒绝”,同时试图连接到MySQL的泊坞窗容器

问题描述 投票:1回答:1

我的问题是如何配置连接到MySQL容器。

这里是我的码头工人,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:[email protected]:3306/iym

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

php symfony symfony4
1个回答
3
投票

我假设你正试图从搬运工,撰写定义的另一个容器/服务连接并使用的是搬运工,撰写的最新版本(2.4或3.7)

你需要改变

DATABASE_URL=mysql://root:[email protected]:3306/iym

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

其原因是,127.0.0.1是指的机器上运行PHP的本地主机。在这种情况下它是PHP的容器本地主机。但DB不会有运行。它运行在另一个泊坞窗的容器,它可以根据服务名称来达到,在这种情况下mysql


docker-compose networking docs写的是:

默认情况下,撰写设置为你的应用程序的单一网络。为服务每个容器加入默认网络既是由网络上的其他集装箱到达,并在相同的容器名称主机名被他们发现。

但是,该服务正在容器名称(这是自动生成projectName_serviceName_1(项目名称首先默认文件夹名称)发现的,而且在服务名称,linkservice alias如果定义。我会建议使用的服务名称尽可能。

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

© www.soinside.com 2019 - 2024. All rights reserved.