在 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 容器),从而导致问题,但不知道如何继续。
感谢您的帮助!
看起来您还没有为来自其他主机而不是默认本地主机的 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
希望这会有所帮助。
如果要连接到在 docker 上运行的 MySQL,请使用
--protocol=TCP
参数。
示例:
mysql --protocol=TCP -uroot -p1234
查看此链接了解更多详情。
如果上述解决方案没有帮助您,请检查您的计算机上是否已启动 MySql:
mysql.server status
如果它正在运行,您可以通过以下方式停止它:
mysql.server stop
之后,重建数据库 Docker 容器,一切都应该正常工作:)