Как связать MySQL с Docker с помощью Navicat или MySQL Workbench? - PullRequest
0 голосов
/ 29 мая 2019

Я использую образы MySQL Docker, и я могу подключиться к этому Docker с помощью mysqli_connect('mysql', 'docker', 'docker'); в php

Вот docker ps:

CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                                          NAMES
c271f8e68378        afraidjpg/nginx:nginx   "nginx -g 'daemon of…"   2 hours ago         Up 2 hours          0.0.0.0:80->80/tcp, 0.0.0.0:10086->10086/tcp   nginx
92d7c923f777        afraidjpg/php:php56     "docker-php-entrypoi…"   2 hours ago         Up 2 hours          0.0.0.0:9000->9000/tcp                         php
68b818bd68c4        afraidjpg/mysql:mysql   "docker-entrypoint.s…"   2 hours ago         Up 2 hours          0.0.0.0:3306->3306/tcp, 33060/tcp              mysql

Я использую опцию --link mysql при запуске PHP Docker.

IP-адрес MySQL Docker: 172.17.0.2 .

IP-адрес моего компьютера Mac 192.168.1.50

вот пользователь в mysql:

mysql> select User, Host from mysql.user;
+--------+-----------+
| User   | Host      |
+--------+-----------+
| docker | %         |
| root   | localhost |
+--------+-----------+
2 rows in set (0.00 sec)

тогда я попытался соединить mysql с navicat и mysql-workbench

хост: 192.168.1.50, пользователь: докер, пароль: докер Access denied for user 'docker'@'%%' (using password: YES)

хост: 127.0.0.1, пользователь: докер, пароль: докер Access denied for user 'docker'@'%%' (using password: YES)

хост: 172.17.0.2, пользователь: докер, пароль: докер Can't connect to MySQL server on '172.17.0.2

все получают ошибку с Access denied for user 'docker'@'%%' (using password: YES)

если я попытался изменить пользователя с docker на root , ошибка станет Access denied for user 'docker'@'172.17.0.1' (using password: YES)

Я нашел какую-то статью раньше и следовал их шагу, но всегда терпел неудачу. Я не там, где я был неправ

вот скриншот

enter image description here

enter image description here

enter image description here

обновление Я не могу пропинговать с локального на докер, и в докере нет команды ping, поэтому я не могу выполнить тест на пинг с докера на локальный

zk ~/Documents/PHP/www/docker $ ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3

больше обновлений

Я могу подключиться к mysql командой в терминале с mysql -udocker -p --portocol=tcp

подробнее

сообщение об ошибке Access denied for user 'docker'@'%%' (using password: YES), said @'%%', я знаю, что такое «%», но что означает «%%»?

1 Ответ

1 голос
/ 29 мая 2019

Попробуйте использовать хост как mysql вместо localhost из подключенного контейнера. Если вы используете Windows, попробуйте 192.168.99.100 в качестве хоста.

Если проблема не устранена, повторите попытку с mysql-compose.yml

version: "3.1"
services:

  mysql:
    image: mysql:5.7.22
    command: "--innodb_use_native_aio=0"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
    env_file:
      - .env
    ports:
      - "3306:3306"
    volumes:
      - /var/database/docker/common:/var/lib/mysql
    networks:
      - mysqlnet
      - mysqlnetfpm

networks:
  mysqlnet:
    driver: bridge
  mysqlnetfpm:
    driver: bridge

Примечание. Перед запуском нового контейнера mysql не забудьте удалить старые файлы mysqldata.

Теперь вы можете использовать имя пользователя как root, пароль как root, а для внутренних контейнеров (прикрепленных контейнеров) использовать хост как mysql.

Если вы пытаетесь подключиться из-за пределов док-станции, попробуйте использовать хост как localhost или 127.0.0.1 или общедоступный docker ip.

...