Docker MYSQL'[2002]连接拒绝'

Fra*_*llc 6 php mysql symfony docker

我第一次尝试使用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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

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

Eme*_*bah 16

我遇到了这个挑战,因为我正在运行 3 个具有不同 IP 地址的不同容器

db - 172.18.0.3 - container for MYSQL
app - 172.18.0.2 - container for Laravel app
Run Code Online (Sandbox Code Playgroud)

所以我通过编辑我的 Laravel .env 文件来修复它

DB_CONNECTION=mysql
DB_HOST=172.18.0.3
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=username
...
Run Code Online (Sandbox Code Playgroud)

获取你的容器IP地址。从您的 docker 主机

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
Run Code Online (Sandbox Code Playgroud)

更新:对于最新的 docker 版本并基于您的 docker-compose.yml 中的服务名称“mysql”

mysql:
  image: mariadb
  ports:
    - 3306:3306
Run Code Online (Sandbox Code Playgroud)

你可以试试这个:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=username
Run Code Online (Sandbox Code Playgroud)

DB_HOST 是 docker-compose.yml 中定义的 MySQL 服务名称


Yar*_*dan 6

我已经设法使用 mysql 命令行工具连接到 mysql 实例,这是我使用的命令 - mysql -u root -p -h 127.0.0.1,以及输入管理员密码。这对你来说是一个足够的解决方案吗?


JL *_*L M 6

'[2002]连接被拒绝'意味着您可以访问数据库服务器,但您无权访问该用户(在您的情况下为admin).默认情况下,mariadb有一个root用户,密码由MYSQL_ROOT_PASSWORD给出,该用户可以从任何服务器(%)连接.

如果要对数据库使用过度登录,则必须在数据库服务器中创建它,并在所选位置的数据库上正确授予.

一个过度的问题是你在数据库服务器'mysql'上运行,默认情况下phpmyadmin尝试连接到'db'.所以你必须添加

      PMA_HOST: mysql
Run Code Online (Sandbox Code Playgroud)

给你Phpmyadmin环境.如果你使用默认配置(与root连接到数据库服务器),我认为MYSQL_USERNAME和PMA_ARBITRARY是无用的