无法通过docker上的学说连接到mysql DB

Posted

技术标签:

【中文标题】无法通过docker上的学说连接到mysql DB【英文标题】:Can't connect to mysql DB by doctrine on docker 【发布时间】:2020-10-30 21:57:13 【问题描述】:

基本上我对教义有疑问。这是我第一次使用教义和mysql在docker容器上建立一个项目。

所以我有 docker-compose.yml

version: '3'
services: 
    api: 
        build: 
            context: ./
            dockerfile: Dockerfile
        container_name: php
        depends_on: 
            - database
        volumes: 
            - ./:/var/www/html/
        ports:
            - 8000:80
        networks:
            - backend
    database: 
        container_name: mysql
        image: mysql:8
        command: --default-authentication-plugin=mysql_native_password
        restart: always
        environment: 
            MYSQL_ROOT_PASSWORD: root
            MYSQL_DATABASE: test_db
            MYSQL_USER: user
            MYSQL_PASSWORD: Test1234
        ports: 
            - 3306:3306
        networks:
            - backend
networks:
    backend:
        driver: bridge

这是我的 Dockerfile

FROM php:7.4.12-apache

RUN apt-get update && apt-get upgrade -y \
    && docker-php-ext-install mysqli pdo_mysql


RUN apt-get install -y libzip-dev
RUN docker-php-ext-install zip

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

      
EXPOSE 80

我的 .env 看起来像(其余部分在开头用 # 注释)

APP_ENV=dev
APP_SECRET=00b8dcf4c62a3db98abc4ae12dc4a6fd
DATABASE_URL=mysql://user:Test1234@localhost:3306/bf_db

注意DATABASE_URL中的localhost和127.0.0.1没有区别

现在当我想运行这个命令时:docker-compose exec api php bin/console doctrine:database:create

我收到这种错误:

[error] Error thrown while running command "doctrine:database:create". 
Message: "An exception occurred in driver: SQLSTATE[HY000] [2002] Connection refused"


In AbstractMySQLDriver.php line 112:

  An exception occurred in driver: SQLSTATE[HY000] [2002] Connection refused


In Exception.php line 18:

  SQLSTATE[HY000] [2002] Connection refused


In PDOConnection.php line 38:

  SQLSTATE[HY000] [2002] Connection refused

我真的不知道如何处理这个

【问题讨论】:

【参考方案1】:

DATABASE_URL 中的 localhost 和 127.0.0.1 没有区别

因为它们指的是 PHP 容器,而不是其他容器。

必须是database:3306

【讨论】:

以上是关于无法通过docker上的学说连接到mysql DB的主要内容,如果未能解决你的问题,请参考以下文章

Django / Docker-compose:重试数据库连接时:django.db.utils.OperationalError:(2002,“无法连接到'db'(115)上的MySQL服务器”)

RazorSQL 和 sql 开发人员无法使用 docker 连接到 Mac 上的 oracle DB

Docker 上的 Spring Boot 无法连接到 MySQL

通过 Beanstalk 部署的 Docker 容器无法连接到 RDS 上的数据库

将 Django 与 Docker 一起使用时出错 - “无法连接到 '127.0.0.1' (111) 上的 MySQL 服务器”)

无法连接到 Docker 上的 SQL 数据库