mysql - 通过 Dockerfile 授予 Root 权限
问题描述
有没有办法通过 Dockerfile 或 docker-compose.yml 授予 root 的所有权限?我正在尝试像这样启动 mysql:latest 映像:
码头工人-compose.yml
version: "3.9"
services:
mysql_database:
container_name: mysql_test_server
restart: always
build: .
image: mysql:latest
command: --default-authentication-plugin=mysql_native_password
ports:
- 3306:3306
volumes:
- ./data:/var/lib/mysql
- ./config:/etc/mysql/conf.d
environment:
MYSQL_ROOT_PASSWORD: root
dockerfile(构建:. on .yml)
FROM mysql:latest
RUN mysql -u root -proot -h localhost -p 3306
RUN grant all privileges on *.* to 'root'@'%' identified by 'root';
RUN flush all privileges;
RUN exit;
EXPOSE 3306
TLDR;我只想自动授予远程连接(SQLYog、DBeaver 等)的权限......如果 docker-compose up,运行这个命令,所以我不需要手动执行,比如docker exet -it mysql_test_server mysql -u root ...
我知道这个:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
解决方案
您的 MySQL 服务器未在此 docker 文件中运行,因此您遇到了错误。
默认的 docker 镜像有root
用户并且root
用户拥有所有权限。
您必须使用环境变量来实现您尝试做的事情:
运行此命令:
docker run --name some-mysql \
-v /my/own/datadir:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=rootPassword \
-e MYSQL_ROOT_HOST="%" \
-p 3306:3306 \
-d mysql:tag
您必须替换-v
参数中的路径。
然后您可以使用以下命令登录 MySQL:
mysql -uroot -prootPassword -h127.0.0.1
您应该查看的参数是MYSQL_ROOT_HOST
. 该变量用于MySQL container entrypoint
:https ://github.com/docker-library/mysql/blob/master/8.0/docker-entrypoint.sh#L232-L239
推荐阅读
- javascript - 没有从搜索功能中获取正确的数据
- ios - 在 iPhone 上获取采样率
- powershell - 在powershell中重命名文件名的一部分
- sql - Oracle SQL:在不重复的多行列中查找特定字符的每个位置
- scala - 使用 play-slick,如何使用配置生成的数据库 API 定义通用组件
- javascript - Mogno 用户和评论
- validation - Symfony 验证单个属性
- python - 我可以用 Python 运行其他程序吗?
- java - 使用字段值初始化的数组中的 ArrayIndexOutOfBoundsException
- c# - 简单文本的正则表达式模式