【问题标题】:open() file failed (13: Permission denied) in nginx & docker & minikubenginx & docker & minikube 中的 open() 文件失败 (13: Permission denied)
【发布时间】:2017-06-18 16:17:12
【问题描述】:

这只发生在 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/; }
}

数据/文件.json

{"a": 1}

使用 docker nginx 镜像运行:

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 似乎无法正常工作。 两者都没有 :( $ 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. 将 docker 用户设置为 nginx

  3. 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 版本 客户: 版本:1.13.1-rc1 API版本:1.23 围棋版本:go1.7.4 Git 提交:2527cfc 建成:2017 年 1 月 28 日星期六 00:43:00 操作系统/架构:darwin/amd64

    服务器: 版本:1.11.1 API 版本:1.23(最低版本) 围棋版本:go1.5.4 Git 提交:5604cbe 建成:2016 年 4 月 27 日星期三 00:34:20 操作系统/架构:linux/amd64 实验:错误

    minikube 版本:v0.15.0

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

【问题讨论】:

  • 您是在 /Users 文件夹下运行它吗?在主机上运行 chmod 后,请在主机上和容器内包含一长串目录。
  • 是的,/Users/... 在我的 Mac 上
  • 您提供的所有输出都是在容器内运行命令。没有任何 docker 命令,在主机上运行命令的输出在哪里?
  • echo $(PWD) 输出什么?
  • /Users/antonk/...

标签: nginx docker file-permissions


【解决方案1】:

当您将主机中的目录直接映射到您的容器时,这些卷挂载如下:

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

【讨论】:

  • 主机端和 docker 端都没有运气docker run -it --rm -v "$(PWD):/etc/nginx/conf.d":ro -v "$(PWD)/data:/data" -p 8085:80 nginx bash -c 'chmod -R 777 /data/ && ls -la /data/file.json && nginx -g "daemon off;"' -rwxrwx--- 1 root 1013 11 Feb 1 13:08 /data/file.json chmod 似乎无法正常工作
  • 你真的在主机上运行过命令吗?由于您挂载了卷 RO,因此无法在容器中对其进行修改。
  • 通知 -v "$(PWD)/data:/data" 在我的评论中没有 ro 标志
  • 我完全忘记了 minikube 上下文 github.com/kubernetes/minikube,抱歉。我的 Mac 上的 Docker 工作正常!我认为这是一个 minikube 问题。感谢您的帮助!
  • 是的,minikube 是一个完全不同的问题。我不确定他们是否支持主机卷,或者他们是否将 MacOS 中的任何文件夹共享到他们的嵌入式 VM 中。
猜你喜欢
  • 2021-11-08
  • 1970-01-01
  • 2018-11-02
  • 2019-12-17
  • 2021-01-31
  • 2022-01-02
  • 2016-06-06
  • 1970-01-01
  • 2017-04-15
相关资源
最近更新 更多