docker中mysql权限异常_docker创建mysql容器权限问题?

应该是你挂载 “-v /home/hhao/mysql_slave/conf:/etc/mysql ” 配置文件里面的参数问题,把 MySQL 的 log 指定到 /var/log 下了,然后 mysql 用户没有这个目录的可写权限,导致 MySQL 启动失败。

下载个镜像验证一下:

root@ab0848e14e94:/# su - mysql

No directory, logging in with HOME=/

$ cd /var/log

$ touch mysqld.log

touch: cannot touch 'mysqld.log': Permission denied

$ cd ..

$ ls -al | grep log

drwxr-xr-x 3 root root 111 Jul 17 2019 log

果然没有权限创建日志文件,问题确认就好解决了,修改宿主机上的 my.cnf 文件 log-error=/var/lib/mysql/mysqld.log ,将日志输入到有权限的 /var/lib/mysql 目录下即可,或者 修改宿主机的 /var/log 目录权限为 777 然后挂载到容器内(将宿主机目录挂载到容器内给普通用户使用时,一定要给足够权限)。

另外你在验证容器内运行用户的时候还犯了一个别的错误。

反查 MySQL 镜像的 Dockerfile:

docker history mysql:8.0.16 --no-trunc=true --format "{{.CreatedBy}}" | sed 's/^\(|3.*\)\?\/bin\/\(ba\)\?sh -c/RUN/' | sed 's/^RUN #(nop) *//' | tac | sed 's/ *&& */ \\\n \&\& /g'

可以看到容器的 ENTRYPOINT 是 /entrypoint.sh, CMD 是 mysqld ,进入容器查看 /entrypoint.sh 脚本,发现是以 gosu 的形式切换到 mysql 用户运行 mysqld 进程的,所以没有权限去 /var/log 目录下创建日志文件,而你用

docker run -it --rm --entrypoint="/bin/bash" mysql:8.0.16 -c "whoami && id"

因为覆盖了默认的 ENTRYPOINT ,所以是验证不出来实际的运行用户的,永远只能得到 root

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值