【问题标题】:How do I serve a Harp/nginx page from Docker?如何从 Docker 提供 Harp/nginx 页面?
【发布时间】:2026-01-23 18:10:01
【问题描述】:

我正在尝试在 Docker 容器中运行 nginx 和 Harp 来为我的博客提供服务。

我发现了这个:https://github.com/octohost/harp-nginx

当我运行sudo docker pull octohost/harp-nginx 时,它会下载一堆文件,但这就是我卡住的地方。

sudo docker run -d -P octohost/harp-nginx 似乎什么也没做。运行此程序后,如果查看sudo docker -ps -a,我可以看到容器已创建,然后在 1-2 秒后退出。我也不知道如何查看我的网站将在哪些端口上提供服务。

我知道 Docker 有几种方法可以访问父 OS 上的文件:https://blog.docker.com/2015/04/tips-for-deploying-nginx-official-image-with-docker/

我希望harp-nginx 容器挂载一个目录,例如~/my_blog/,并让 Harp 动态编译这些目录并使用 nginx 提供服务(在自定义端口上,因为 80 已经在使用中)。我想从父操作系统编辑~/my_blog/ 中的降价源,并让更改在网站中自动生效。但是我不知道如何处理上面链接的 octohost 容器。我怎样才能完成我想要的?

【问题讨论】:

  • docker events 是第一个要查看的内容,请参阅文档docs.docker.com/reference/commandline/events
  • @user2915097 docker events 如何帮助我解决这个问题?
  • docker 事件将“解释”为什么您的容器会在几秒钟后退出,因此您可以尝试解决此问题。

标签: ubuntu nginx docker harp


【解决方案1】:

当我运行 sudo docker pull octohost/harp-nginx 时,它会下载一堆文件,但这就是我卡住的地方。

这些文件应该是docker镜像,用来创建docker容器。

sudo docker run -d -P octohost/harp-nginx 似乎没有做任何事情。在我运行这个之后,如果我查看 sudo docker -ps -a 我可以看到容器被创建,然后在 1-2 秒后退出。我也不知道如何查看我的网站将在哪些端口上提供服务。

通常可以查看一个容器的日志看看是什么问题,可以运行docker logs <container_id/container_name>

然后我们回到你的问题,似乎octohost/harp-nginx 没有执行任何命令,所以你应该编写自己的Dockerfile 来使用环境。从octohost/harp-nginx's repo README,你可以像这样写一个Dockerfile

FROM octohost/harp-nginx

WORKDIR /srv/www

ADD . /srv/www/
RUN harp compile

EXPOSE 80

CMD nginx

那么你就可以使用docker build -t my-harp-nginx .构建自己的harp-nginx容器,构建成功后,你可以使用docker run --name "harp-nginx" -d -p 8080:80 my-harp-nginx创建一个新容器

请注意,这里我们将主机的 8080 端口映射到容器的 80 端口,因此您可以从 http://localhost:8080 访问容器的端口

我希望 harp-nginx 容器挂载一个目录,例如 ~/my_blog/,并让 Harp 即时编译这些目录并使用 nginx 提供服务(在自定义端口上,因为 80 已经在使用中)。我想从父操作系统编辑 ~/my_blog/ 中的降价源,并让更改在网站中自动生效。但是我不知道如何处理上面链接的 octohost 容器。我怎样才能完成我想要的?

我对@9​​87654334@不熟悉,所以这里是我的理解和建议。

  • 你应该在主机而不是容器中运行harp compile,只需将编译后的静态内容挂载到nginx容器中,让nginx为它服务。如果您这样做,只需使用任何nginx docker 映像,例如dockerfile/nginx,然后将您的harp 输出挂载到/var/www/html

  • 似乎harp 还不支持实时重新加载,因此您需要一些额外的工具来实现它。 [这部分我不确定,只是google了一下]

【讨论】:

  • 感谢您的建议。如果我理解正确,harp compile 用于将 Markdown 编译为静态资产一次,然后提供 html。但是 Harp 应该能够编译 html on-demand also:“Harp 可以根据浏览器的需要智能地编译资产,因此速度非常快。您所要做的就是保存并刷新。” 也许而不是RUN harp compile 我应该使用RUN harp server?
  • @Superbest 是的,如果您使用harp server,那么这意味着您将使用harp 来提供所有内容并作为http 服务器而不是nginx。但是对于性能消耗,我建议您使用nginx 来提供您的网站内容。
  • 啊,所以 nginx 只能在我自己 harp compile 到静态 HTML 时提供 Harp 内容?
  • @Superbest 你可以关注这个issue,可能会有帮助