【问题标题】:nginx alpine docker fails without previous ls?没有以前的 ls,nginx alpine docker 失败了吗?
【发布时间】:2016-02-17 14:22:10
【问题描述】:

我想在基于 alpine 的 docker 文件中使用带有 nginx 的激进。 我目前正在开发 Dockerfile 并注意到一个非常奇怪的行为,也许有人可以向我解释一下。

  1. 构建映像

https://gist.github.com/cdpb/7ab1690f30fe6a911dac

  1. docker run -it <id> sh
  2. su radicale -c 'nginx -t'

:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [emerg] mkdir() "/var/lib/nginx/tmp/client_body" failed (13: Permission denied)
nginx: configuration file /etc/nginx/nginx.conf test failed
  1. ls -l /var/lib/nginx/tmp

:

total 20
drwxr-xr-x    2 radicale radicale      4096 Feb 17 11:39 client_body
drwxr-xr-x    2 radicale radicale      4096 Feb 17 11:39 fastcgi
drwxr-xr-x    2 radicale radicale      4096 Feb 17 11:39 proxy
drwxr-xr-x    2 radicale radicale      4096 Feb 17 11:39 scgi
drwxr-xr-x    2 radicale radicale      4096 Feb 17 11:39 uwsgi
  1. su radicale -c 'nginx -t'

:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

那么在ls 之后会发生什么?它不应该影响任何权限......!?有人可以重现吗?

问候

cdpb

UPDATE1:也适用于stat /var/lib/nginx/tmp/*

UPDATE2:因为 docker 为 Dockerfile 中的每个命令创建了一个新层,我认为 nginx 必须与 chmod/chown 层在同一层中启动 - 没有解决问题

UPDATE3:我对安装了 alpine ( virtualbox ) 的磁盘做了同样的事情,但问题没有发生。所以这更像是一个与docker相关的问题或一个特殊的alpine docker one

【问题讨论】:

  • /var/lib/nginx/tmp在运行第一个nginx命令之前的内容是什么?
  • 请提供docker info 输出。我已经看到了 overlayfs 和 devicemapper Docker 存储驱动程序的奇怪之处。对我来说唯一真正有效的驱动程序是 AUFS。
  • 在此处查看有关 Docker 存储驱动程序的更多信息:docs.docker.com/engine/userguide/storagedriver/selectadriver(如果您的主机系统支持,您可能想尝试一些)
  • 我正在使用 AUFS。好点,我将测试相同的存储后端。 Server Version: 1.9.1 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 196 Dirperm1 Supported: true Execution Driver: native-0.2 Logging Driver: json-file Kernel Version: 3.16.0-4-amd64 Operating System: Debian GNU/Linux 8 (jessie) CPUs: 1 Total Memory: 1000 MiB Name: lab
  • 固定为overlayfs 而不是AUFS - 感谢@Vlad Frolov 的提示

标签: nginx permissions docker ls alpine


【解决方案1】:

我的答案来自 cmets。

这种奇怪之处通常与Docker storage driver有关。

在大多数操作系统上通常有几个可用的 Docker 存储驱动程序:

  • AUFS(在 Ubuntu、Boot2Docker 中可用和默认,在 Debian 测试中也可用) - 而 AFAIK,它在历史上是 Docker 中的第一个 FS 驱动程序,AUFS 不是主线 Linux 内核的一部分,所以它没有被广泛采用.
  • OverlayFS - 最接近 AUFS 的主线 Linux 内核替代方案
  • Device Mapper - 最慢但最便携的 Docker 存储驱动程序
  • 等等……

这是一张很好的图片,比较了上面发布的链接中的不同存储驱动程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 2017-12-28
    • 1970-01-01
    • 2019-11-20
    相关资源
    最近更新 更多