无法从本地主机连接到 Docker 中的 MySQL(Docker for Mac beta)

问题描述 投票:0回答:3

在 Mac OS X El Capitan 上。

用于使用Docker Toolbox。刚刚删除了它并安装了 Docker for Mac beta。 (我觉得拆卸和安装都很干净。)

本质上是像这样启动一个 MySQL 服务器容器:

docker run -e MYSQL_ROOT_PASSWORD=1234 -d mysql:5.7.13

(或 mysql/mysql-server:5.7.13)。启动似乎没问题。然后我尝试从 Sequel Pro 连接到该服务器,通过“标准”方式,主机 127.0.0.1,root,1234。得到了

Unable to connect to host 127.0.0.1 because access was denied.

Double-check your username and password and ensure that access from your current location is permitted.

MySQL said: Access denied for user 'root'@'localhost' (using password: YES)

使用

-p 3306:3306
没有帮助。

它曾经与我启动的 Docker Toolbox 一起使用

    docker run \
      -e MYSQL_ROOT_PASSWORD=1234 \
      -d \
      --expose 3306 \
      -p 3306:3306 \
      mysql:5.7.12

并连接到主机 192.168.99.100。效果很好。

我怀疑 Docker for Mac 在安装过程中的“迁移”(将现有的 Docker 内容复制到新的虚拟机中)可能会保留一些旧数据(来自旧的 MySQL 容器),从而导致问题,但不知道如何继续。

感谢您的帮助!

mysql docker localhost
3个回答
3
投票

看起来您还没有为来自其他主机而不是默认本地主机的 root 用户配置访问权限。

传递 -p 3306:3306 您只需创建一个从主机到客户机的端口转发。因此,您可以简单地允许您的用户从您的主机(172.17.0.1)连接到数据库。

例如我正在使用以下虚拟容器启动脚本,该脚本会更改 root 的密码,以防它之前未更改:

#!/bin/bash

cd $(dirname $0)

docker-compose up -d

ROOT_PASSWORD=root
CONTAINER=____mysql_container_name___
CHANGE_PASS_SQL="delete from mysql.user;grant all on *.* to 'root'@'%' identified by '${ROOT_PASSWORD}' with grant option;flush privileges;"
CHANGE_PASS="docker exec -it ${CONTAINER} mysql -s -uroot -e \"${CHANGE_PASS_SQL}\" 2>/dev/null"

WITH_PASS='echo "select now();" | docker exec -i ${CONTAINER} mysql -root -proot 1>&2 2>/dev/null'
NO_PASS='echo "select now();" | docker exec -i ${CONTAINER} mysql -root 1>&2 2>/dev/null'

WITH_PASS_EXIT_CODE=1000
NO_PASS_EXIT_CODE=1000

while [ ${WITH_PASS_EXIT_CODE} -gt 0 ];do
    eval "${WITH_PASS}"
    WITH_PASS_EXIT_CODE=$?
    eval "${NO_PASS}"
    NO_PASS_EXIT_CODE=$?

    echo -n .

    if [ ${NO_PASS_EXIT_CODE} -eq 0 ];then
        eval "${CHANGE_PASS}"
    else
        sleep 1
    fi
done

echo

希望这会有所帮助。


0
投票

如果要连接到在 docker 上运行的 MySQL,请使用

--protocol=TCP
参数。

示例:

mysql --protocol=TCP -uroot -p1234

查看链接了解更多详情。


-1
投票

如果上述解决方案没有帮助您,请检查您的计算机上是否已启动 MySql:

mysql.server status

如果它正在运行,您可以通过以下方式停止它:

mysql.server stop

之后,重建数据库 Docker 容器,一切都应该正常工作:)

© www.soinside.com 2019 - 2024. All rights reserved.