今天在测试环境的 centos7.4 上使用 Docker 部署 httpd 服务时,遇到了以下3个报错:
第一个和第三个是在 Apache httpd 的标准输出日志里的报错,第二个是在客户端访问时报错。
按照通常思路,上网搜一波,网上绝大部分解决思路都是从 SELinux,我也尝试着从 SELinux 入手,发现本机的 SELinux已禁用,问题应该不在这。期间还检查了主机的内核配置,包括 IPv4 和 IPv6 转发配置等,但都不是问题的关键点。看了好几篇 stackoverflow 的文章,仍未解决。
查看了原主机目录下的文件 index.html,权限是 644,不做任何挂载时,该文件是能够正常被访问到的。又看了我在主机上创建的主机目录的权限,发现主机被挂载的 volume 上一层目录的权限是:750,被挂载的文件的权限是640,忽然灵机一动,问题可能在 umask。查看该用户的 umask,果然是0027。一般情况下,某些公司出于安全考虑,可能将用户的 umask 设置为 0027。将 umask 改回常规默认值,重新创建 www 目录和放置被访问的资源,一切恢复正常。相关命令:
umask 0022
这种方式并不能永久变更 umask 的值,如需配置永久生效,可以系统启动脚本内进行配置,此处不再赘述。