docker - docker-compose卷的行为

标签 docker nginx docker-compose

使用docker-compose,行为与卷不一致。

我使用的是nginx:1.15-alpine,如果我挂载/var/log/nginx,nginx可以轻松创建/var/log/nginx/error.log,但是如果我挂载/var/log,nginx无法创建/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

不起作用
webserver:
  image: nginx:1.15-alpine
  ports:
    - '80:80'
  volumes:
    - /mnt/fs/webserver/nginx:/etc/nginx/conf.d
    - /mnt/fs/webserver/log:/var/log

我知道不需要挂载不包含其他目录的目录,因为我可以成功将Wordpress容器中的/var/www/html挂载到卷,/var/www/html包含子目录。

使用不起作用配置时,nginx出现以下错误:

nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (2: No such file or directory)



为什么挂载/var/log/nginx有效,而挂载/var/log不起作用?

最佳答案

如果您在主机上创建一个空目录并将其安装到容器上的/var/log,则容器中的/var/log将成为主机的空目录。如果您随后尝试写入/var/log/nginx/error.log,则没有任何东西创建中间nginx目录,并且您收到“没有这样的文件或目录”错误。

在启动容器之前,将卷直接安装到目标目录上,或者在主机目录中创建中间目录(具有适当的权限):

mkdir /mnt/fs/webserver/log/nginx
chmod 0777 /mnt/fs/webserver/log/nginx

关于docker - docker-compose卷的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51200959/

相关文章:

javascript - Vagrant VM 中 Ubuntu 上的 nginx 中途随机停止发送 JS 文件

sql-server - .NET Core API 无法通过 docker-compose 连接到数据库

Docker 初始化失败

docker - 具有不同上下文路径的多个 docker-compose 文件

docker - 在 Windows 中使用 docker-compose 创建挂载源路径时出错

heroku - 如何使用Docker在本地设置Heroku应用程序?

mysql - 为什么 Wordpress 无法在此 docker-compose 应用程序中连接到 MySQL?

Docker 镜像/容器未更新

apache - 删除 Nginx 或 Apache 中的基本授权 header

php - nginx 重定向循环,从 url 中删除 index.php