Docker MYSQL '\[2002\] 连接被拒绝'

新手上路,请多包涵

我是第一次尝试 Docker。启动并运行了 LEMP 堆栈,但我无法连接到 MYSQL 数据库。不在我的 Symfony 应用程序上,不在 PHPMyAdmin 上。应用程序返回以下错误代码:

驱动程序发生异常:SQLSTATE[HY000] [2002] Connection denied

这是我的 docker-compose.yml:

 nginx:
    image: tutum/nginx
    ports:
        - "80:80"
    links:
        - phpfpm
    volumes:
        - ./nginx/default:/etc/nginx/sites-available/default
        - ./nginx/default:/etc/nginx/sites-enabled/default

        - ./logs/nginx-error.log:/var/log/nginx/error.log
        - ./logs/nginx-access.log:/var/log/nginx/access.log
phpfpm:
    build: phpfpm/
    ports:
        - "9000:9000"
    volumes:
        - ./public:/usr/share/nginx/html
mysql:
  image: mariadb
  ports:
    - 3306:3306
  environment:
    MYSQL_ROOT_PASSWORD: admin
phpmyadmin:
  image: phpmyadmin/phpmyadmin
  restart: always
  links:
    - mysql
  ports:
    - 8183:80
  environment:
    MYSQL_USERNAME: admin
    MYSQL_ROOT_PASSWORD: admin
    PMA_ARBITRARY: 1

Dockerfile PHPFPM:

     FROM php:fpm

RUN docker-php-ext-enable opcache
RUN apt-get update \
  && apt-get install -y --no-install-recommends libpq-dev \
  && docker-php-ext-install mysqli pdo_pgsql pdo_mysql

GitHub 网址: https ://github.com/MolengraafFrank/DockerSymfony

有人可以帮我吗?感谢您的时间。

原文由 Frank Millc 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

‘[2002] Connection denied’ 意味着您可以访问数据库服务器,但您没有用户(在您的情况下为管理员)的正确访问权限。默认情况下,mariadb 有一个 root 用户,密码由 MYSQL_ROOT_PASSWORD 给出,该用户可以从任何服务器 (%) 连接。

如果您想使用过度登录到您的数据库,您必须在数据库服务器中创建它,并从所选位置授予数据库权限。

这里的问题是您将数据库服务器命名为“mysql”(docker-compose 文件中的服务名称)。但默认情况下,phpmyadmin 会尝试连接到名为“db”的数据库服务器。在 phpmyadmin 服务的环境部分下添加 PMA_HOST: mysql 将解决此问题。


我认为 MYSQL_USERNAME 和 PMA_ARBITRARY 如果您使用默认配置(使用 root 连接到您的数据库服务器)是无用的

原文由 JL M 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果你想知道你的连接失败的原因,你可以在你的终端中使用 php artisan tinker 然后喜欢

DB::connection()->getPdo();

不幸的是,这只会给您部分错误。 退出 tinker ,然后使用此命令 php artisan db 将为您提供有关该问题的更多信息,例如数据库类型、主机、端口、广告用户。

像这个

ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:3306' (61)

   Symfony\Component\Process\Exception\ProcessFailedException

  The command "'mysql' '--host=127.0.0.1' '--port=3306' '--user=root' '--default-character-set=utf8mb4' 'laravel'" failed.

Exit Code: 1(General error)

Working directory: /Users/Dev/Documents/www/laravel_docker/src/addressAPI

Output:
================

Error Output:
================

  at vendor/symfony/process/Process.php:270
    266▕      */
    267▕     public function mustRun(callable $callback = null, array $env = []): self
    268▕     {
    269▕         if (0 !== $this->run($callback, $env)) {
  ➜ 270▕             throw new ProcessFailedException($this);
    271▕         }
    272▕
    273▕         return $this;
    274▕     }

      +14 vendor frames
  15  artisan:37
      Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

这不会为您提供错误的答案,但至少您可以理解您的配置错误的原因。

原文由 Dominique Delcourt 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题