首先,我知道不能正常运行。我有一种异常情况:我需要使用mysqldump和--tab参数,它需要写入磁盘的权限,并且我希望在Docker容器之外使用这些文件。我可以解释为什么将mysqld作为root运行使这更容易,但这个问题还不够长吗?在这种情况下,以root方式运行是安全的,因为容器只用于运行测试和更新基于SQL迁移脚本的DB备份脚本,并且它将开始执行1项工作,然后再重新删除。
当我在谷歌上搜索如何将mysqld作为根运行时,我会在关于如何不以root用户身份运行的说明中找到间接的答案。除其他外,为了将mysqld作为user_name运行:
以用户user_name的身份启动服务器。另一种选择是以Unix根用户的身份启动mysqld并使用-- user =user_name选项。 若要在系统启动时自动以给定用户身份启动服务器,请将用户选项添加到服务器数据目录中的/etc/my.cnf选项文件或my.cnf选项文件的mysqld组中,从而指定用户名。
我们要做其中的一个吗?这两个?我假设两者都是以防万一。但是,它们真的是指/etc/my.cnf吗?还是这取决于安装(例如,哪个Linux发行版)?例如,码头形象mysql:5.6有/etc/mysql/my.cnf。MySql码头操作指南图像建议在/etc/mysql/conf.d安装一个卷,该卷在前面的my.cnf中引用。(这样做会覆盖默认存在的2个配置文件,因此我在Dockerfile中使用了COPY命令,而只是添加了一个配置文件。)该文件确实会进入容器中:
root@4f612d10a690:/etc/mysql/conf.d# cat my.cnf
[mysqld]
user=rootMySql手册中的另一个要求是将--user=root参数添加到mysqld。正式的MySql映像通过它的CMD调用mysqld,所以我在我的文件中覆盖它。我的CMD命令确实运行(它运行在官方MySql映像的入口点脚本中的两个位置):
# 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映像的入口点脚本在运行前会更改到mysql用户:
# allow the container to be started with `--user`
if [ ...blah... -a "$(id -u)" = '0' ]; then
...blah...
exec gosu mysql "$BASH_SOURCE" "$@"
fi上面的片段基本上说,如果用户是root用户,那么作为mysql用户运行所提供的参数(在本例中是CMD + args )。
将mysqld作为根用户运行只是官方的MySql码头映像不支持吗?
发布于 2017-06-16 15:21:15
注意:这是如何作为SO的根用户运行mysqld进程,以及而不是如何获取根MySQL用户。
我不知道是否有更好的方法,但这是可行的。
从官方的entrypoint.sh来看,它似乎不支持约束默认的mysql用户--我认识到如何将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)根据已经创建的数据dir再次启动一个新的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 auxhttps://stackoverflow.com/questions/44592222
复制相似问题