使用docker-compose
,行为与卷不一致。
我正在使用nginx:1.15-alpine
,如果我挂载/var/log/nginx
,nginx可以毫无问题地创建/var/log/nginx/error.log
,但是如果我挂载/var/log
,nginx无法创建{{1} }。
工程
/var/log/nginx/error.log
不起作用
webserver:
image: nginx:1.15-alpine
ports:
- '80:80'
volumes:
- /mnt/fs/webserver/nginx:/etc/nginx/conf.d
- /mnt/fs/webserver/log:/var/log/nginx
我知道不需要挂载不包含其他目录的目录,因为我可以将Wordpress容器中的webserver:
image: nginx:1.15-alpine
ports:
- '80:80'
volumes:
- /mnt/fs/webserver/nginx:/etc/nginx/conf.d
- /mnt/fs/webserver/log:/var/log
成功地挂载到一个卷上,/var/www/html
包含子目录。
使用不起作用配置时,nginx出现以下错误:
nginx:[警报]无法打开错误日志文件:open()“ /var/log/nginx/error.log”失败(2:无此类文件或目录)
为什么挂载/var/www/html
无效,而挂载/var/log/nginx
无效?
答案 0 :(得分:1)
如果在主机上创建一个空目录并将其安装到容器上的/var/log
,则容器中的/var/log
将是主机的空目录。如果随后尝试写入/var/log/nginx/error.log
,则没有任何操作创建中间nginx
目录,并且会收到“没有这样的文件或目录”错误。
在启动容器之前,要么将卷直接安装到目标目录上,要么在主机目录中创建中间目录(具有适当的权限):
mkdir /mnt/fs/webserver/log/nginx
chmod 0777 /mnt/fs/webserver/log/nginx
答案 1 :(得分:0)
Works
----------------------------------
webserver:
image: nginx:1.15-alpine
ports:
- '80:80'
volumes:
- /mnt/fs/webserver/nginx:/etc/nginx/conf.d
- /mnt/fs/webserver/log:/var/log/nginx
Does Not Work
----------------------------------
webserver:
image: nginx:1.15-alpine
ports:
- '80:80'
volumes:
- /mnt/fs/webserver/nginx:/etc/nginx/conf.d
- /mnt/fs/webserver/log:/var/log
-------------------------------
Both Work if you given proper permission to /mnt/fs/webserver/log
Just set permission sudo chmod 777 -R /mnt/fs/webserver/log
After that try rebuilding image it works for me...
If that not work try using
sudo chown -R $USER:$USER /mnt/fs/webserver/log
or
sudo chown -R $USER:$UID /mnt/fs/webserver/log