【问题标题】:Docker - invalid sharing of index.html Nginx fileDocker - index.html Nginx 文件的无效共享
【发布时间】:2016-03-14 20:57:18
【问题描述】:

我的 docker-compose.yml 文件如下所示:

web:
  image: nginx:latest
  volumes:
    - /c/Users/marcin/docker/nginx-www/nginx/html/:/usr/share/nginx/html/ 
  ports:
    - "80:80"

/c/Users/marcin/docker/nginx-www/nginx/html/ 中,我创建了index.html 文件,其内容如下:

<html>
<head>
</head>
<body>
hello index
</body>
</html>

但是当我查看我的域时,我看到了空白页面,但是在查看页面源代码时,我看到了类似这样的内容:

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

似乎 Docker 正在使用默认的 Nginx 文件并且只占用了其中的一部分(可能是它在我的 index.html 文件中的确切长度。对于其他文件,例如 abc.html 没有这样的问题(可能是因为它Nginx 镜像中默认不存在)。如何解决此问题以显示正确的index.html 文件内容?

【问题讨论】:

    标签: nginx docker docker-compose


    【解决方案1】:

    由于您的卷以 /c/... 开头,我假设您使用的是 Windows 上的 Docker Toolbox 和随附的 docker-machine 工具。您遇到的是 Nginx 的 known issue(或者更确切地说 Nginx 使用的 sendfile Linux 系统调用)与 Virtualbox 共享文件夹结合使用。

    Vagrant documentation(也使用 VirtualBox)中也提到了这个问题,它还附带了一个可能对您有用的建议解决方案:

    有一个与 sendfile 相关的 VirtualBox 错误,它可能导致文件损坏或无法更新。您应该在您可能正在运行的任何 Web 服务器中停用 sendfile。

    在 Nginx 中:

    sendfile off;
    

    在 Apache 中:

    EnableSendfile Off
    

    根据bug report in the vendor bug tracker 中最新的cmets,如果您使用open_file_cache 指令(默认禁用),您也需要将其关闭:

    open_file_cache off;
    

    【讨论】:

    • 非常感谢。当我将它添加到 nginx conf 时,它无法正常工作。文件的所有更改现在都反映在网络服务器上
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 2019-02-24
    • 1970-01-01
    相关资源
    最近更新 更多