web-dev-qa-db-fra.com

Docker MYSQL '[2002] Connexion refusée'

J'essayais Docker pour la première fois. Vous avez une pile LEMP opérationnelle, mais je ne peux pas me connecter à la base de données MYSQL. Pas sur mon application Symfony, pas sur PHPMyAdmin. Les applications renvoient le code d'erreur suivant:

Une exception s'est produite dans le pilote: SQLSTATE [HY000] [2002] Connexion refusée

Ceci est mon 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

URL GitHub: https://github.com/MolengraafFrank/DockerSymfony

Est-ce que quelqu'un peut me donner un coup de main? Merci pour votre temps.

5
Frank Millc

La «[2002] connexion refusée» signifie que vous pouvez accéder au serveur de base de données, mais que vous n'avez pas le droit d'accès pour l'utilisateur (dans votre cas, administrateur). Par défaut, mariadb a un utilisateur root avec le mot de passe fourni par MYSQL_ROOT_PASSWORD et cet utilisateur peut se connecter depuis n’importe quel serveur (%). 

Si vous souhaitez utiliser une connexion supplémentaire à vos bases de données, vous devez la créer dans le serveur de bases de données avec les droits appropriés sur les bases de données à partir d'emplacements choisis.

Un problème supplémentaire est que vous avez géré la base de données 'mysql' et que phpmyadmin essaye par défaut de se connecter à 'db'. Donc il faut ajouter 

      PMA_Host: mysql

phpmyadmin environment . Je pense que MYSQL_USERNAME et PMA_ARBITRARY sont inutiles si vous travaillez avec une configuration par défaut (connexion avec root à votre serveur de bases de données)

6
JL M

J'ai réussi à me connecter à l'instance mysql à l'aide de l'outil de ligne de commande mysql. C'est la commande que j'ai utilisée - mysql -u root -p -h 127.0.0.1 et la saisie du mot de passe administrateur. Est-ce une solution suffisante pour vous?

2
Yaron Idan

vous devez lier le conteneur phpfpm à mysql.

0
edlerd