php - Symfony 4 "Connection refused"尝试连接到 docker mysql 容器

标签 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。我应该怎么做才能连接到数据库?非常感谢!

最佳答案

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

By default Compose sets up a single network for your app. Each container for a service joins the default network and is both reachable by other containers on that network, and discoverable by them at a hostname identical to the container name.



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

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

关于php - Symfony 4 "Connection refused"尝试连接到 docker mysql 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54524325/

相关文章:

php - 从不同的计算机访问应用程序

php - Composer 命令不起作用 - PHP 警告:Phar::mapPhar

php - 将 HTML (tinyMCE) 转换为 WORD (.docx)

php - 将 Symfony 4.3.9 升级到 4.4.1/5.0 后的弃用警告

php - Symfony 4以表单类型获取当前用户?

php - 为 CMS 制作一个 SEO 友好的 URL

azure - Webpack Encore 在 Symfony 4 生产环境中没有在 "build"文件夹中写入 css 和 js

Symfony 2.7 应用程序审计跟踪 - 最佳实践

php - 如何将依赖于序列化组的属性从 API 平台公开到 react-admin?

mysql - 仅允许具有标识符的实体将实体绑定(bind)到查询参数