DBI connect ('database = orthomcl; host = db; mysql_local_infile = 1', 'orthomcl', ...) не выполнен: доступ запрещен для пользователя - PullRequest
1 голос
/ 04 мая 2019

У меня есть cat orthomcl/Dockerfile:

FROM debian:stretch-backports

RUN apt-get update  && apt-get install -y --no-install-recommends \
        wget \
        cpanminus \
        build-essential \
        default-libmysqlclient-dev \
        python \
        ca-certificates \
        && rm -rf /var/lib/apt/lists/*

RUN cpanm DBI DBD::mysql

Это мой docker-compose.yml:

orthomcl:
    tty: true
    build: orthomcl
    restart: always
    links:
        - db
    volumes:
        - ./output_dir/:/output_dir

db:
  image: mariadb
  restart: always
  environment:
    - MYSQL_ROOT_PASSWORD="PAssw0rd"
    - MYSQL_DATABASE="orthomcl"
    - MYSQL_USER="orthomcl"
    - MYSQL_PASSWORD="PAssw0rd"
  ports:
    - "3306:3306"
  volumes:
    - ./mysql/:/docker-entrypoint-initdb.d

Это файл конфигурации SQL:

$ cat mysql/orthomcl.sql 
CREATE DATABASE IF NOT EXISTS `orthomcl`;
create user `orthomcl`@`db` identified by 'PAssw0rd';
GRANT ALL PRIVILEGES on `orthomcl`.* to `orthomcl`@`db`;

Скрипт Perl, который подключается к базе данных: output_dir/test.pl

#!/bin/env perl  
use DBI;
require DBD::mysql;

my $dbConnectString="DBI:mysql:database=orthomcl;host=db;mysql_local_infile=1";
my $dbLogin="orthomcl";
my $dbPassword="PAssw0rd";

DBI->connect($dbConnectString, $dbLogin, $dbPassword, { RaiseError => 1 } ) or
die ( "Couldn't connect to database: " . DBI->errstr );

Далее я использовал docker-compose up, а после этого:

$ docker-compose run orthomcl perl /output_dir/test.pl
Starting orthomcl_db_1 ... done
DBI connect('database=orthomcl;host=db;mysql_local_infile=1','orthomcl',...) failed: Access denied for user 'orthomcl'@'172.17.0.4' (using password: YES) at /output_dir/test.pl line 10.

В журналах MySQL показано:

...
db_1        | 2019-05-04  4:56:31 0 [Note] mysqld: ready for connections.
db_1        | Version: '10.3.14-MariaDB-1:10.3.14+maria~bionic'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution
db_1        | 2019-05-04  4:58:19 8 [Warning] Access denied for user 'orthomcl'@'172.17.0.4' (using password: YES)

Как можно решить вышеуказанную ошибку?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 04 мая 2019

Причиной ошибки является то, что вашей базе данных не удалось разрешить IP-адрес клиента, «172.17.0.4», обратно к имени хоста, которое вы использовали для учетной записи, «db». Вам нужно обеспечить надежное прямое и обратное разрешение доменных имен в вашей среде докера, если вы хотите работать следующим образом.

В качестве альтернативы, если вы довольны тем, что ваша докерская среда (и используемый для нее диапазон частных IP-адресов) достаточно защищены от внешнего доступа, вы можете отказаться от самой идеи ограничения учетных записей конкретными адресами клиентов и использовать подстановочный знак «%» для принимающей части. Если это ваш подход, вы также можете добавить «--skip-name-resol» в конфигурацию сервера базы данных, чтобы соединения не вызывали бесполезных DNS-запросов и возможных задержек.

0 голосов
/ 04 мая 2019

не совсем уверен в настройке файла Docker, но ошибка:

Доступ запрещен для пользователя 'orthomcl'@'172.17.0.4' (с использованием пароля: ДА)

, поэтому предоставьте привилегии IP, диапазону (172.%) или всем

create user `orthomcl`@`%` identified by 'PAssw0rd';
GRANT ALL PRIVILEGES on `orthomcl`.* to `orthomcl`@`%`;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...