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
- 我的 OS:Ubuntu 20.04.4 LTS。
- MySQL: mysql Ver 8.0.29-0ubuntu0.20.04.2 for Linux on x86_64 (( Ubuntu))
- Docker:Docker 版本 20.10.14,构建 a224086
问题出在已发布的端口上,特别是 -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
我使用以下命令设置了一个 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
- 我的 OS:Ubuntu 20.04.4 LTS。
- MySQL: mysql Ver 8.0.29-0ubuntu0.20.04.2 for Linux on x86_64 (( Ubuntu))
- Docker:Docker 版本 20.10.14,构建 a224086
问题出在已发布的端口上,特别是 -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