【发布时间】:2016-02-17 14:22:10
【问题描述】:
我想在基于 alpine 的 docker 文件中使用带有 nginx 的激进。 我目前正在开发 Dockerfile 并注意到一个非常奇怪的行为,也许有人可以向我解释一下。
- 构建映像
https://gist.github.com/cdpb/7ab1690f30fe6a911dac
docker run -it <id> shsu 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
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
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