Docker 与 nginx 组合不断显示欢迎页面

2024-04-29

我是新来的docker并尝试使用最简单的 docker-compose.yml 显示一个 hello world 页面,并在此基础上构建最终完整的LEMP堆栈它将与我的服务器具有相同的配置。然而大多数教程已经过时,并且有很多使用方法docker我找不到一个仅使用码头工人组成v3 仍然是实际的。我检查了文档,对于初学者来说这也非常令人困惑,在过去的 5 个小时里一直试图让它工作,所以我想我应该问一下。

docker-compose.yml

version: '3'
services:
  web:
    image: bitnami/nginx:1.10.3-r0 #using this version as it's the same on my server
    volumes:
      - "./test.conf:/etc/nginx/sites-available/test.local"
      - "./test.conf:/etc/nginx/sites-enabled/test.local"
      - "./code:/var/www/html" #code contains only a basic index.html file
    ports:
      - "80:80"

测试配置文件

server {
    listen 80;
    listen [::]:80;
    server_name test.local;

    index index.html; #Only a basic helloworld index.html file
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html;
}

我需要一个Dockerfile有了这个?教程似乎没有提到它是必要的。

NOTE:
尝试增加音量

- "./default.conf:/etc/nginx/conf.d/default.conf"

但没有任何变化,欢迎页面仍然加载,同时nginx:最新我收到一个非常详细的错误,其中包含以下短语:“未知:您是否正在尝试将目录安装到文件上(或反之亦然)?检查指定的主机路径是否存在并且是预期的类型”。

关于 docker-compose.yml 的更新:

  • 不带线"./code:/usr/share/nginx/html", the /usr/share/nginx/html文件夹包含默认的index.html 文件(预期)
  • 随着线"./code:/usr/share/nginx/html", the /usr/share/nginx/html文件夹是EMPTY!
  • 随着线"./:/usr/share/nginx/html", the /usr/share/nginx/html文件夹有一个空的“代码”文件夹和一堆我不久前删除的随机测试文件。

在尝试之间,我运行重置脚本以确保重新开始:

docker rm $(docker ps -a -q)
docker rmi $(docker images -q) --force
docker volume rm $(docker volume ls -q)

Running docker inspect <container>返回该卷的值,不确定该类型作为“绑定”是否正常绑定挂载 https://docs.docker.com/storage/bind-mounts/代替volume https://docs.docker.com/storage/volumes/.

"Mounts": [
    {
        "Type": "bind",
        "Source": "/e/DEV/sandbox/docker",
        "Destination": "/usr/share/nginx/html",
        "Mode": "rw",
        "RW": true,
        "Propagation": "rprivate"
    }
],

安装您自己的 hello world 页面很容易。我用官方的解释一下nginx:latest图像,但如果您愿意,您可以使用 bitnami 图像自己完成。

首先是非常基本的。只需运行 nginx 容器(无需 docker-compose)。我将详细和基本地解释它,当然我可以尝试执行更高级或更快的命令来读取容器内的文件,但这对于初学者来说可能会感到困惑。所以只需运行容器并为其命名my-nginx:

$ docker run --rm -d -p 80:80 --name my-nginx nginx

Go to localhost:80,您将看到默认的 nginx 页面。 现在您可以使用容器的名称在容器内执行。 exec 会将您带入“容器内部”,以便您可以检查其文件。

$ docker exec -it my-nginx bash
root@2888fdb672a1:/# cd /etc/nginx/
root@2888fdb672a1:/etc/nginx# ls
conf.d      koi-utf  mime.types  nginx.conf   uwsgi_params
fastcgi_params  koi-win  modules     scgi_params  win-utf

现在阅读nginx.conf通过使用cat。 该文件中最重要的行是:

include /etc/nginx/conf.d/*.conf;

这意味着所有confs在该目录内使用/读取。 所以进入/etc/nginx/conf.d/.

root@2888fdb672a1:~# cd /etc/nginx/conf.d/
root@2888fdb672a1:/etc/nginx/conf.d# ls
default.conf

The default.conf是唯一的文件。在此文件中您可以看到配置:

listen       80;
server_name  localhost;

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

服务器是本地主机,端口是80,将显示的文件在目录中/usr/share/nginx/html/

现在检查容器中的该文件:

root@2888fdb672a1:/etc/nginx/conf.d# cat /usr/share/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
...

这是预期的文件。我们可以看到“Welcome to Nginx”页面。 那么我们怎样才能展示自己的index.html?只需将其安装在/usr/share/nginx/html.

You'll docker-compose.yaml会看起来像这样。

version: '3'
services:
  web:
    image: nginx:latest
    volumes:
      - ./code:/usr/share/nginx/html
    ports:
      - "80:80"

代码目录只包含一个index.html与你好世界。 跑步docker-compose up -d --build当你卷曲时localhost:80你会看到你自己的index.html.

如果您确实想将代码放入/var/www/html代替/usr/share/nginx你可以做到的。

用你的test.conf。在这里您定义将文件放入/var/www/html/:

server {
    listen 80;
    listen [::]:80;
    server_name test.local;

    index index.html; #Only a basic helloworld index.html file
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html;
}

在撰写中,您将覆盖default.conf用你自己的conf告诉nginx去查看/var/www/html。 您的撰写可能如下所示:

version: '3'
services:
  web:
    image: nginx:latest
    volumes:
      - "./test.conf:/etc/nginx/conf.d/default.conf"
      - "./code:/var/www/html"
    ports:
      - "80:80"

现在您还将看到自己的index.html当它位于您自己指定的位置时。答案很长,但我希望这会有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 与 nginx 组合不断显示欢迎页面 的相关文章

随机推荐

  • “class java.lang.String”中名为“tablename”的属性没有 getter

    我收到错误There is no getter for property named tablename in class java lang String 当我使用mybatis时 我的映射器 xml 是这样的
  • 如何使图像保留在 CSS 网格容器的行中?

    下面的代码显示了当我调整窗口大小时的预期行为 Chrome 60 和 Firefox 55 中 但 iOS Safari 10 3 中除外 这很可能是它在 Safari 中行为不当的另一个问题 html body width 100 hei
  • 没有 ProfilePage 索引,但我有 LoginAndSignupPage

    我有一个前两天突然出现的问题 我有一个 prestashop 模块 可以让我从 Instagram 页面检索图像 它运行得很好 但突然之间 什么都不起作用了 我有一个错误 ProfilePage 未定义的索引 我做了很多var dump 我
  • 从 URL 中删除文件扩展名

    我从未使用过 mod rewrite 但我想从网站的网址中删除所有文件扩展名 我需要遵循什么规则才能做到这一点 我已经尝试过这个 但是每次我单击网站上的链接时都会出现内部错误 RewriteRule 1 php L Options Mult
  • 使用 client_body_in_file_only 进行 nginx 文件上传

    晚上好 我需要将静态内容上传到 nginx 服务器 1 9 因此上传模块不适用于此版本 我读过这篇文章 Nginx 直接文件上传 无需通过后端传递 https coderwall com p swgfvw nginx direct file
  • WPF 动画第一次不运行

    我有一个窗口 其目的是在显示时淡入 第一次使用时 动画不会运行 在后续使用中 效果很好 这是一个请求者 我实例化它来显示一些东西 我不会保留它并重新使用实例 我实例化请求者 设置各种属性 例如 Top 和 Left 然后调用 ShowDia
  • MKMapview 将图钉放置在位置(长/纬度)

    我有纬度和长值 我需要能够在这个位置放置图钉 有人可以提供一些关于如何解决这个问题的建议吗 找到下面非常简单的解决方案 将引脚放置在由以下定义的给定位置CL位置坐标二维 http developer apple com library ma
  • 在 JAXB 或 Xstream 中,是否可以在解组期间过滤掉类型/值上的某些子元素

    希望大家都好 快速提问看看是否有人有任何反馈 过去两天我正在尝试 JaxB 和 Xstream 我基本上使用 XML 库将 XML 编组到 Java 对象或从 Java 对象中解组 这是一项非常简单的任务 我很快就完成了 但是 我想要解组到
  • 当用户应该有权访问他拥有的交易时,Rspec 测试失败,用户被重定向

    在我的应用程序中 借助 Cancan 我允许客户访问他自己的优惠 当我用浏览器 手动 尝试时它有效但我未能实施 rspec 测试 客户无法访问其他客户的交易 只能访问他自己的交易 管理员通过 Active Admin 界面授予他访问权限 就
  • 重用 CloudBlobClient 对象

    我有这两个对象用于 Azure Blob 存储访问 并希望在 ASP NET MVC 应用程序中使用它们 CloudBlobClient blobClient storageAccount CreateCloudBlobClient Clo
  • jQuery Masonry 和媒体查询 - 重新加载 masonry

    我的网站设计有媒体查询 以覆盖不同大小的布局 我有砌体组织一堆全尺寸宽度的浮标 没问题 在移动宽度下 所有浮子都会浮起并堆叠在一起 所以我只需要在网站大小调整为平板电脑布局且 768px
  • Struts 2 S2-016 漏洞缓解直至升级

    最近 Struts 修复了一个允许攻击者执行远程代码的漏洞 显然 不修补这个问题就像用潮流欢迎黑帽子一样 http struts apache org release 2 3 x docs s2 016 html http struts a
  • R 中自定义函数的自动创建和使用

    我想在 for 循环中创建评估不同的索引 这些指数有不同的公式 并不总是需要评估 f i 我要评估的指数可能是 a 1 b 2 c 5 d 8 IDX1 function a b result a b IDX2 function c b r
  • 故事板放大/缩小键盘快捷键

    Xcode 中可以使用什么快捷键组合来放大和缩小 是的 我知道这是一个愚蠢的问题 但谷歌搜索没有给我任何结果 甚至 Xcode 键盘快捷键也没有给我太多信息 也许我必须要求为 Xcode 4 5 提供更好的更新键盘快捷键文档 你也可以用鼠标
  • 流星和陨石(mrt)有什么区别?

    例如 有些网站告诉我使用mrt add accounts ui 使用陨石 对吧 其他人说meteor add accounts ui 据我了解 陨石 https github com oortcloud meteorite只是一个版本控制
  • “key”是MySqli中的保留字吗?我收到错误

    我刚刚真正接触 MySql MySqli 并且正在使用准备好的语句 除了这一行之外 我的整个脚本运行良好 if stmt con gt prepare SELECT bandHash userHash userPassHash type F
  • WinForms 与 mshtml 和 ie9 的问题

    IE9 似乎破坏了我的 32 位 winforms net 3 5 应用程序中基于 mshtml com 的 WebBrower html 编辑器 由于我必须使用 activex USB 设备控制器 它必须设置为 32 位 该错误不稳定 它
  • Python 中使用 RegEx 的函数解析器

    我有一个 Fortran 源代码 几乎不相关 我想解析函数名称和参数 例如使用 w with a b 1 2 2 c 3 4 我得到以下信息 如预期 b 1 2 2 c 3 4 我需要的地方 a b 1 2 2 c 3 4 b 1 2 2
  • 类验证器不验证数组

    我无法让类验证器工作 看起来我没有使用它 一切都像我没有使用类验证器一样工作 当发送正文格式不正确的请求时 我没有任何验证错误 尽管我应该这样做 My DTO import IsInt Min Max from class validato
  • Docker 与 nginx 组合不断显示欢迎页面

    我是新来的docker并尝试使用最简单的 docker compose yml 显示一个 hello world 页面 并在此基础上构建最终完整的LEMP堆栈它将与我的服务器具有相同的配置 然而大多数教程已经过时 并且有很多使用方法dock