MySQL 连接到 docker 容器时访问被拒绝

MySQL access denied while connecting to the docker container

我使用以下命令设置了一个 docker 容器

sudo docker run --name qa_mysql -e MYSQL_ROOT_PASSWORD=0000 -p3306 -d mysql:latest 

在执行 sudo docker ps -a 时我可以看到容器存在:

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                  PORTS                                                    NAMES
bb79e1f63b0c   mysql:latest   "docker-entrypoint.s…"   53 seconds ago   Up 48 seconds           33060/tcp, 0.0.0.0:49153->3306/tcp, :::49153->3306/tcp   qa_mysql

但是我无法使用此命令mysql连接到容器

mysql -h 127.0.0.1 -P3306 -u root -p

我一直收到这个错误

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

我使用了所有密码变体(比如我在设置容器时写的密码,真正的 sudo 密码等)

此外,我尝试使用以下命令更改 mysql root@locathost 的密码:

sudo service mysql stop
sudo mysqld_safe --skip-grant-tables
sudo service mysql start
sudo mysql -u root
use mysql;
show tables;
describe user;
update user set authentication_string=password('0000') where user='root';
FLUSH PRIVILEGES;

但没有任何帮助。

还有: 当我尝试

update user set authentication_string=password('0000') where user='root';

第二次得到:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('0000') where user='root'' at line 1

问题出在已发布的端口上,特别是 -p3306

改用:

sudo docker run --name qa_mysql -e MYSQL_ROOT_PASSWORD=0000 -p 3306:3306 -d mysql:latest 

通过这种方式,您可以将容器端口 3306 发布到主机的端口 3306。使用您之前的方式,您的容器端口绑定到一个随机主机端口。

如果您 运行 docker ps,在状态部分之后您可以看到分配的端口


随机端口分配示例

在这种情况下,您会 运行

mysql -h 127.0.0.1 -P49156 -u root -p