首页 > 解决方案 > 通过 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)

标签: mysqldockerdocker-composeremote-connection

解决方案


您的 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 entrypointhttps ://github.com/docker-library/mysql/blob/master/8.0/docker-entrypoint.sh#L232-L239


推荐阅读