nginx alpine docker 没有之前的 ls 失败?
nginx alpine docker fails without previous ls?
我想在基于 alpine 的 docker 文件中将 radicale 与 nginx 一起使用。
我目前正在开发 Dockerfile 并注意到一个非常奇怪的行为,也许有人可以向我解释一下。
- 构建映像
https://gist.github.com/cdpb/7ab1690f30fe6a911dac
docker run -it <id> sh
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
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 相关问题或一个特殊的高山 docker one
从评论中移动我的答案。
这种怪事通常与Docker storage driver有关。
在大多数操作系统上通常有几个可用的 Docker 存储驱动程序:
- AUFS(在 Ubuntu、Boot2Docker 中可用且默认,并且在 Debian 测试中也可用)——据我所知,它是历史上 Docker 中的第一个 FS 驱动程序AUFS 不是主线 Linux 内核的一部分,因此未被广泛采用。
- OverlayFS - 主线 Linux 内核最接近 AUFS
- Device Mapper - 最慢但最便携的 Docker 存储驱动程序
- 等...
这是一张很好的图片,比较了上面发布的 link 中的不同存储驱动程序。
我想在基于 alpine 的 docker 文件中将 radicale 与 nginx 一起使用。 我目前正在开发 Dockerfile 并注意到一个非常奇怪的行为,也许有人可以向我解释一下。
- 构建映像
https://gist.github.com/cdpb/7ab1690f30fe6a911dac
docker run -it <id> sh
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
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 相关问题或一个特殊的高山 docker one
从评论中移动我的答案。
这种怪事通常与Docker storage driver有关。
在大多数操作系统上通常有几个可用的 Docker 存储驱动程序:
- AUFS(在 Ubuntu、Boot2Docker 中可用且默认,并且在 Debian 测试中也可用)——据我所知,它是历史上 Docker 中的第一个 FS 驱动程序AUFS 不是主线 Linux 内核的一部分,因此未被广泛采用。
- OverlayFS - 主线 Linux 内核最接近 AUFS
- Device Mapper - 最慢但最便携的 Docker 存储驱动程序
- 等...
这是一张很好的图片,比较了上面发布的 link 中的不同存储驱动程序。