通过 Dockerfile 授予 Root 权限

时间:2021-01-21 19:06:21

标签: mysql docker docker-compose remote-connection

有什么方法可以通过 Dockerfile 或 docker-compose.yml 将所有权限授予 root 吗? 我正在尝试启动一个 mysql:latest 像这样的图像:

docker-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(构建:.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)

1 个答案:

答案 0 :(得分:0)

您的 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