Подключение к Docker MySQL DBeaver

Я только что закончил следовать этому руководству по Docker на YouTube:

https://www.youtube.com/watch?v=SXY0MLHP3hA&lc=Ugzp3vKtSOp0rn2lYyd4AaABAg

Мне удалось создать пару контейнеров Docker для PHP и MySQL. Структура файла следующая:

>Docker_PHP_MySQL
 >DB
   -Dockerfile
 >src
   -index.php
 >www
   -Dockerfile
 development.env
 docker-compose.yml

Докерфайл БД:

FROM mysql:8.0

индекс.php:

<?php
$mysqli = new mysqli('tut07-db', getenv('MYSQL_USER'), getenv('MYSQL_PASSWORD'), 'information_schema');
if($mysqli->connect_error) 
{
  echo 'Connection Error [', $mysqli->connect_errno, ']: ', $mysqli->connect_error;
} 
else 
{
  echo 'MySQLi Connected Successfully!';
}
?>

Докерфайл www:

FROM php:7.2-apache

RUN docker-php-ext-install mysqli
RUN docker-php-ext-enable mysqli

Вот файл development.env:

MYSQL_USER=sys_admin
MYSQL_PASSWORD=sys_password
MYSQL_ROOT_PASSWORD=root_password

И, наконец, файл docker-compose.yml:

version: "3"

networks:
  tut07-frontend:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.10.1.0/24
  tut07-backend:
    driver: bridge
    ipam: 
      driver: default
      config:
        - subnet: 172.10.2.0/23

services:
  tut07-db:
    build: ./db
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - 3306:3306
    networks:
      tut07-backend:
        ipv4_address: 172.10.3.2
    env_file:
      - ./development.env
  tut07-www:
    build: ./www
    ports:
      - 8080:80
    volumes:
      - ./src:/var/www/html/
    networks:
      tut07-backend:
        ipv4_address: 172.10.2.2
      tut07-frontend:
        ipv4_address: 172.10.1.2
    depends_on:
      - tut07-db
    env_file:
      - ./development.env

Теперь вот где я знаю, что я иду в полностью слепой ...

В dbeaver пытаюсь установить соединение:

введите описание изображения здесь

Но когда я проверяю соединение, я получаю следующий ответ:

введите описание изображения здесь

Как решить эту проблему?


person John Beasley    schedule 01.05.2019    source источник


Ответы (4)


Вместо того, чтобы указывать localhost_compliant-db в качестве хоста сервера в dbeaver, попробуйте указать ему localhost.

3306 порт также привязан к хост-компьютеру, поэтому localhost:3306 с вашего хост-компьютера должен работать.

PS. Я предполагаю, что стек компоновки dbeaver и docker находится на одной машине. Если нет, вам нужно сопоставить localhost_compliant-db с определенным IP-адресом, который может понять ваш хост-компьютер.

person vivekyad4v    schedule 01.05.2019
comment
Спасибо за ваш вклад. Я проверю и дам вам знать. - person John Beasley; 01.05.2019
comment
Я обновил сервер до localhost, но теперь я получаю новую ошибку подключения, которая выглядит следующим образом: Доступ запрещен для пользователя «root» @ «172.10.2.1» (используя пароль: YES) - person John Beasley; 02.05.2019
comment
Это совсем другая проблема, т.е. разрешения в БД. Если можно, поднимите новый вопрос. Эта проблема в основном была связана с установлением соединения с контейнером БД, которая сейчас, кажется, решена. - person vivekyad4v; 02.05.2019
comment
Я подумал, что должен задать еще один вопрос. Спасибо за вашу помощь. - person John Beasley; 02.05.2019

Для тех, кто запускает БД на другом компьютере, вы можете сделать следующее:

Во-первых, из того места, где находится контейнер, запустите docker ps, чтобы получить сведения о контейнерах, включая Container ID

[root@test-001 ~]# docker ps 
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                    NAMES
1b02333fb3b9        tutum/nginx              "/usr/sbin/nginx"        6 weeks ago         Up 7 days           0.0.0.0:80->80/tcp       docker_nginx_1
8c1d234a3731        mariadb                  "docker-entrypoint.s…"   6 weeks ago         Up 7 days           0.0.0.0:3306->3306/tcp   docker_mysql_1

После получения идентификатора контейнера базы данных запустите docker inspect CONTAINER_ID, чтобы получить соответствующий IP-адрес этого контейнера.

[root@test-001 ~]# docker inspect 8c1d234a3731 | grep -i IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.23.0.3",

В Dbeaver, после выбора типа БД при добавлении нового окна подключения, перейдите к network settings (SSH, ...), затем укажите данные своего докер-машины. и с главной страницы в Server Host: добавьте IP, который вы получили от команды docker inspect, затем свои учетные данные.

Это должно работать

person Eng7    schedule 17.06.2020
comment
Привет!. что я должен ввести для сервера-хоста на главной странице. Я ввел 127.0.0.1 или localhost, даже пробовал путь к mysql но не получилось - person Yilmaz; 06.10.2020
comment
Это должен быть IP-адрес вашего сервера, если вы используете его на своем локальном компьютере, то 127.0.0.1 должен работать. - person Eng7; 08.10.2020

В моем случае я использовал DBBeaver для подключения к MariaDB через порт 3306, однако порт моего контейнера не был сопоставлен с моим локальным портом 3306, поэтому мне просто нужно было добавить конфигурацию портов в файл docker-compose.yml.

ports:
- "3306:3306"
person Oliver    schedule 29.05.2020

Если возможно, измените разрешение в свойствах драйвера allowPublicKeyRetrieval на true. Это работает для меня.

AllowPublicKeyRetrieval=True

person Vagner Antonio da Silva    schedule 11.01.2021