今天遇到一个问题,困扰我好久。在docker里面使用go创建文件夹。
err := os.MkdirAll(logDir, 0755)
if err != nil {
glog.Errorf("创建日志文件夹错误:%s", err)
user, err := user.Current()
if err != nil {
log.Fatalf(err.Error())
}
username := user.Username
glog.Infof("当前用户:%s", username)
return
}
总是报错:

非常郁闷,后来查了stackoverflow:
上面有这句话

正如上面说的, os.MkdirAll(xxx,0777)这里绝大多数情况都是用0777,因为创建文件夹会触发底层系统调用。系统创建文件夹的时候文件夹的权限等于输入的0777-umask, 文件夹的umask通常是0022,也就是0777创建,创建完成之后都是0755了。所以这里应该用0777.
但是改完之后发现还是不行,还是报错。
最终发现给docker启动命令里添加--privileged=true 参数才能解决。
应该是因为docker的映射的目录默认不能创建文件夹,要做这些操作必须设置 --privileged=true才行。
这个挂载目录,如果进入docker容器,cd到目录会发现连ls都无权限。
ls: cannot open directory .: Permission denied
可以说是巨坑了。