我有一个运行 Mysql 8 的 docker 设置。
我可以在docker容器内访问Mysql,但是,我无法使用Mysql工作台进行连接。我有另一个 mysql 容器,但这个是 Mysql 版本 5.7,我与该容器的连接没有问题。
我尝试在 mysql.user 中使用 % 来允许 root 用户完全主机访问
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
我尝试使用主机名连接到容器:localhost、0.0.0.0、127.0.0.1 和端口 3306 但没有运气
我还创建了一个单独的用户并授予完全权限,但仍然没有运气
下面是我的 Docker 撰写文件
version: '3.5'
services:
database:
build:
context: ./images/mysql
restart: always
command: ['--default-authentication-plugin=mysql_native_password']
environment:
- MYSQL_DATABASE=inim
- MYSQL_USER=inimuser
- MYSQL_PASSWORD=inimpass
- MYSQL_ROOT_PASSWORD=docker
ports:
- "3306:3306"
volumes:
- ./database/data:/var/lib
volumes:
my-datavolume:
我的 Dockerfile:
FROM mysql:8.0.20
CMD ["mysqld"]
EXPOSE 3306
下面是我的 Docker PS
b8832d9711b4 docker_inim_db_database "docker-entrypoint.s…" 14 minutes ago Up 14 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp docker_inim_db_database_1
我对 Mysql 5.7 有类似的设置,并且连接良好。不知道我在这里做错了什么。
您可以通过进入容器来调试您的进程。 请运行:
$ docker exec docker_inim_db_database_1 /bin/bash
现在您应该处于容器的 bash 中。 然后使用以下命令登录 mysql bash:
$ mysql -uroot -p
然后输入您的密码,如果没有密码,则直接按 Enter。
该过程有两个步骤:
a) 授予权限。作为 root 用户,用当前的 root 密码替换“密码”来执行:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
b) 绑定到所有地址:
最简单的方法是注释掉 my.cnf 文件中的行:
#bind-address = 127.0.0.1
并重新启动mysql
service mysql restart
默认情况下,它仅绑定到本地主机,但如果您注释该行,它会绑定到它找到的所有接口。注释掉该行相当于bind-address=*。
要检查 mysql 服务已绑定的位置,请以 root 身份执行:
netstat -tupan | grep mysql
Ubuntu 16 更新:
配置文件是(现在)
/etc/mysql/mysql.conf.d/mysqld.cnf
以上大部分步骤均来自答案:https://stackoverflow.com/a/11225588/659077
version: '3.3'
services:
central_db_8.0.30:
image: mysql:8.0.30
container_name: local-central-db-container-8.0.30
environment:
MYSQL_ROOT_PASSWORD: Ro@t1234
volumes:
- ./dbdata:/var/lib/mysql
- ./my.cnf:/etc/mysql/my.cnf:ro
ports:
- 3306:3306
networks:
- local_central_db_network
networks:
local_central_db_network:
external: true
[mysqld]
pid-file=/var/lib/mysql/mysql.pid
default_authentication_plugin=mysql_native_password
sudo docker network create local_central_db_network
sudo docker-compose down
sudo docker-compose build && docker-compose up -d
sudo chmod 777 -R *
docker start local-central-db-container-8.0.30
docker exec -it local-central-db-container-8.0.30 bash
chown 644 /etc/mysql/my.cnf
mysql -u root -p
Ro@t1234
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Ro@t1234';
SHOW DATABASES;