有什么方法可以通过 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)
答案 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