【问题标题】:Grant Privileges to Root via Dockerfile通过 Dockerfile 授予 Root 权限
【发布时间】:2021-01-21 19:06:21
【问题描述】:

有没有办法通过 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(构建:. 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-compose remote-connection


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 2013-06-25
      • 2012-03-23
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多