1

我想在基于 alpine 的 docker 文件中将激进的 nginx 与 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

4

1 回答 1

3

从评论中转移我的答案。

这种怪异通常与Docker 存储驱动程序有关。

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

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

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

Docker 存储驱动程序的优缺点

于 2016-03-28T09:38:36.430 回答