簡體   English   中英

Docker MYSQL '[2002] 連接被拒絕'

[英]Docker MYSQL '[2002] Connection refused'

我是第一次嘗試 Docker。 啟動並運行了 LEMP 堆棧,但我無法連接到 MYSQL 數據庫。 不在我的 Symfony 應用程序上,不在 PHPMyAdmin 上。 應用程序返回以下錯誤代碼:

驅動程序中發生異常:SQLSTATE[HY000] [2002] 連接被拒絕

這是我的 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

有人可以幫我嗎? 感謝您的時間。

“[2002] 連接被拒絕”意味着您可以訪問數據庫服務器,但您沒有用戶的正確訪問權限(在您的情況下為管理員)。 默認情況下,mariadb 有一個 root 用戶,其密碼由 MYSQL_ROOT_PASSWORD 給出,該用戶可以從任何服務器 (%) 進行連接。

如果您想對您的數據庫使用過度登錄,您必須在數據庫服務器中創建它,並從所選位置對數據庫進行正確授權。

這里的問題是您將數據庫服務器命名為“mysql”(docker-compose 文件中的服務名稱)。 但默認情況下,phpmyadmin 會嘗試連接到名為“db”的數據庫服務器。 在phpmyadmin服務的環境部分下添加PMA_HOST: mysql就可以解決這個問題。


我認為 MYSQL_USERNAME 和 PMA_ARBITRARY 如果您使用默認配置(與 root 連接到您的數據庫服務器)是無用的

我遇到了這個挑戰,因為我正在運行 3 個具有不同 IP 地址的不同容器

db - 172.18.0.3 - container for MYSQL
app - 172.18.0.2 - container for Laravel app

所以我通過編輯我的 Laravel .env 文件來修復它

DB_CONNECTION=mysql
DB_HOST=172.18.0.3
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=username
...

獲取你的容器IP地址。 從您的 docker 主機

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

更新:對於最新的 docker 版本並基於您的 docker-compose.yml 中的服務名稱“mysql”

mysql:
  image: mariadb
  ports:
    - 3306:3306

你可以試試這個:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=username

DB_HOST 是 docker-compose.yml 中定義的 MySQL 服務名稱

我已經設法使用 mysql 命令行工具連接到 mysql 實例,這是我使用的命令 - mysql -u root -p -h 127.0.0.1 ,並輸入管理員密碼。 這對你來說是一個足夠的解決方案嗎?

就我而言,我在端口映射到主機 mac ( 3306:3306 ) 的 docker 容器中運行mysql 我嘗試使用 127.0.0.1 從phpmyadmin docker 容器連接到這個數據庫。 但它不起作用,因為phpmyadmin docker 容器上的localhost沒有運行所需的mysql

從 docker 網絡連接到主機

docker.for.mac.host.internal

Docker 網絡Docker Compose 網絡

就我而言,問題出在端口映射上

就我而言,它是3307:3306 ,只要我在右側將其更改為3307 ,就可以連接到數據庫實例。

添加DB_READ_HOST=db為我解決了這個問題

如果你想知道你的連接失敗的原因,你可以在你的終端中使用 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))

這不會給你什么是錯誤的答案,但至少你可以理解為什么你的配置是錯誤的。

您需要將 phpfpm 容器鏈接到 mysql。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM