nginx&中的open()文件失败(13:权限被拒绝)码头工人minikube

时间:2017-02-01 19:19:11

标签: nginx docker file-permissions

这只发生在minikube内的docker 使用minikube docker eval (minikube docker-env)

在主机上运行

尝试使用Nginx为单个文件构建基本设置:

conf.d / example.conf

server {
  listen 80 default_server;
  listen [::]:80 default_server ipv6only=on;
  server_name localhost;
  location /file.json { root /data/; }
}

数据/ file.json

{"a": 1}

使用docker nginx image运行:

docker run -it --rm -v "$(PWD)/conf.d:/etc/nginx/conf.d":ro -v "$(PWD)/data:/data":ro -p 8085:80 nginx

curl http://localhost/file.json给了我2017/02/01 19:07:39 [error] 6#6: *1 open() "/data/file.json" failed (13: Permission denied)...

无法弄清楚如何做到这一点......需要帮助!

到目前为止我已尝试过:

  1. 提供chmod -R o+x /data && ls -la data && nginx -g "daemon off;"等自定义命令 -rwxrwx--- 1 root 1013 11 Feb 1 13:08 /data/file.json chmod似乎不能正常工作。 既不chown :( $ docker run -it --rm -v "$(PWD):/etc/nginx/conf.d":ro -v "$(PWD)/data:/data" -p 8085:80 nginx bash -c 'chown -R nginx:nginx /data/ && ls -la /data/ && nginx -g daemon off;"' total 8 drwxrwx--- 1 root 1013 102 Feb 1 13:08 . drwxr-xr-x 1 root root 4096 Feb 1 19:50 .. -rwxrwx--- 1 root 1013 11 Feb 1 13:08 pub_key.json

  2. 将泊坞窗用户设置为nginx

  3. 主持人
  4. chmod -R 777 data $ ls -la data drwxrwxrwx 3 antonk staff 102 Feb 1 17:08 data $ docker run -it --rm -v "$(PWD):/etc/nginx/conf.d":ro -v "$(PWD)/data:/data" -p 8085:80 nginx bash -c 'ls -la /data/ && nginx -g "daemon off;"' total 8 drwxrwx--- 1 root 1013 102 Feb 1 13:08 . drwxr-xr-x 1 root root 4096 Feb 1 20:20 .. -rwxrwx--- 1 root 1013 11 Feb 1 13:08 pub_key.json

    $ docker version   客户:   版本:1.13.1-rc1   API版本:1.23   转到版本:go1.7.4   Git commit:2527cfc   建造:2017年1月28日星期六00:43:00   OS / Arch:darwin / amd64

    服务器:   版本:1.11.1   API版本:1.23(最低版本)   转到版本:go1.5.4   Git提交:5604cbe   建造时间:2016年4月27日星期三00:34:20   OS / Arch:linux / amd64   实验:假

    minikube版本:v0.15.0

  5. https://github.com/kubernetes/minikube/issues/1067

1 个答案:

答案 0 :(得分:0)

当您将主机中的目录直接映射到容器中时,如下所示:

docker run -it --rm \
  -v "$(PWD)/conf.d:/etc/nginx/conf.d":ro -v "$(PWD)/data:/data":ro \
  -p 8085:80 nginx

文件直接安装在您的主机上具有相同的uid和文件权限。您的主机上的UID / GID很可能与容器内使用的UID / GID不匹配。因此,如果文件在主机上不可公开读取,则它们将无法在容器内读取。您可以在主机上使用以下内容解决此问题:

chmod o+rx data && chmod o+r data/file.json