nginx alpine docker 没有之前的 ls 失败?

nginx alpine docker fails without previous ls?

我想在基于 alpine 的 docker 文件中将 radicale 与 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 相关问题或一个特殊的高山 docker one

从评论中移动我的答案。

这种怪事通常与Docker storage driver有关。

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

  • AUFS(在 Ubuntu、Boot2Docker 中可用且默认,并且在 Debian 测试中也可用)——据我所知,它是历史上 Docker 中的第一个 FS 驱动程序AUFS 不是主线 Linux 内核的一部分,因此未被广泛采用。
  • OverlayFS - 主线 Linux 内核最接近 AUFS
  • Device Mapper - 最慢但最便携的 Docker 存储驱动程序
  • 等...

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