加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2020-12-11 23:51:42 所属栏目:MySql教程 来源:网络整理
导读:在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).发

在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内容复制到新VM中)可能会保留一些导致问题的旧数据(来自旧的MySQL容器),但不知道如何继续.

谢谢你的帮助!

最佳答案 看起来您没有为其他主机配置root用户访问权限,而不是默认localhost.

传递-p 3306:3306您只需创建一个从主机转发到客户机的端口.因此,您只需允许您的用户从您的hist机器172.17.0.1连接到DB.

例如.我正在使用以下虚拟容器启动脚本,它会更改root的密码,以防它在以前不会更改:
????#!/斌/庆典

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

希望这会有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读