docker-compose卷的行为

时间:2018-07-05 23:02:36

标签: docker nginx docker-compose

使用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无效?

2 个答案:

答案 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