首先,我知道不要正常运行。我有一个异常情况:我需要将mysqldump与--tab参数一起使用,这需要写入磁盘的权限,我想在Docker容器之外使用这些文件。我可以解释为什么以root身份运行mysqld会让这更容易,但这个问题还不够长吗?在这种情况下,以root身份运行是安全的,因为容器将仅用于运行测试和基于SQL迁移脚本更新数据库备份脚本,并且它将开始执行1个作业,然后再次取回。
当我谷歌如何以root身份运行mysqld时,我在instructions on how to NOT run as root中间接找到答案。除了运行mysqld作为user_name:
之外以user_name用户身份启动服务器。另一种方法是启动mysqld作为Unix root用户并使用--user = user_name选项。
要在系统启动时自动启动服务器作为给定用户,请通过在/etc/my.cnf选项文件的[mysqld]组或my.cnf选项文件中添加用户选项来指定用户名。服务器的数据目录。
我们会做其中一个吗?这两个?我假设两者都是为了以防万一。但它们真的意味着/etc/my.cnf
,还是取决于安装(例如Linux发行版)?例如。 Docker图像mysql:5.6
具有/etc/mysql/my.cnf
。 directions for the MySql Docker图片建议在/etc/mysql/conf.d
处安装一个卷,该卷在前面提到的my.cnf中引用。 (这样做会覆盖默认情况下存在的2个配置文件,因此我在Dockerfile中使用了COPY命令而不是仅添加配置文件。)文件确实将其放入容器中:
root@4f612d10a690:/etc/mysql/conf.d# cat my.cnf
[mysqld]
user=root
MySql手册的另一个要求是将--user=root
参数添加到mysqld。官方的MySql映像通过它的CMD调用mysqld,所以我在我的Dockerfile中覆盖了它。我的CMD命令确实运行(它在官方MySql图像中的2个位置运行' s entrypoint script):
# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mysql 1 0.1 2.8 1452788 472756 ? Ssl 14:24 0:01 mysqld --user=root
请注意,mysqld具有我提供的--user = root命令,但是作为mysql用户运行,而不是以root身份运行。
这是我的完整Dockerfile:
FROM mysql:5.6
VOLUME ["/var/lib/mysql-files"]
COPY ["my.cnf", "/etc/mysql/conf.d"]
CMD ["mysqld", "--user=root"]
我唯一猜测它为什么不以root身份运行是因为mysql image的入口点脚本在运行之前更改为mysql用户:
# allow the container to be started with `--user`
if [ ...blah... -a "$(id -u)" = '0' ]; then
...blah...
exec gosu mysql "$BASH_SOURCE" "$@"
fi
上面的代码段基本上说,如果用户是root,那么运行提供的参数(在本例中为CMD + args)作为mysql用户。
官方的MySql Docker镜像是以root身份运行mysqld而不是不支持吗?
答案 0 :(得分:0)
注意:这是如何运行mysqld进程作为SO的root用户,以及不如何获取root用户的root用户。
我不知道是否存在更好的方法,但这有效。
查看官方entrypoint.sh,似乎不支持对默认mysql
用户进行查询
我意识到如何以root身份运行mysql,但是你需要已经初始化了数据目录。
步骤1)启动一个普通的mysql以初始化一个卷(mysql entrypoint.sh将完成这项工作):
docker run \
--rm \
-v $(pwd)/mysql/:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD="abc" \
mysql:5.6
步骤2)停止并移除该容器:
docker stop <container-id>
步骤3)根据已创建的数据目录再次启动一个新的mysql进程,但这次避免运行官方的mysql入口点:
docker run \
-v $(pwd)/mysql/:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD="abc" \
--entrypoint mysqld \
mysql:5.6 \
--user root
步骤4)检查:
▶ docker exec -it 4add4d065c3e bash
root@4add4d065c3e:/# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 2.8 23.0 1314864 471104 ? Ssl 15:12 0:00 mysqld --user root
root 28 3.0 0.1 20248 3040 ? Ss 15:12 0:00 bash
root 34 0.0 0.1 17500 2068 ? R+ 15:12 0:00 ps aux