如何从 Docker 提供 Harp/nginx 页面?

How do I serve a Harp/nginx page from Docker?

我正在尝试 运行 在 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 已经在采用)。我想从父 OS 编辑 ~/my_blog/ 中的降价源,并让更改在网站中自动生效。但是我不知道如何处理上面链接的 octohost 容器。我怎样才能完成我想要的?

When I run sudo docker pull octohost/harp-nginx, it downloads a bunch of files, but this is where I am stuck.

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

sudo docker run -d -P octohost/harp-nginx doesn't seem to do anything. After I run this, if I look at sudo docker -ps -a I can see that the container gets created, then exits 1-2 seconds later. I also don't know how to see what ports my website will be served on.

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

那我们回到你的问题,好像octohost/harp-nginx不执行任何命令,所以你应该自己写Dockerfile来使用环境。从 octohost/harp-nginx 的 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

访问容器的端口

I want the harp-nginx container to mount a directory, for instance ~/my_blog/, and have Harp compile these on the fly and serve them with nginx (on a custom port because 80 is already in use). I want to edit the markdown source in ~/my_blog/ from the parent OS, and have the changes automatically take effect in the website. However I can't figure out what to do with the octohost container linked above. How can I accomplish what I want?

我不熟悉harp,所以这里是我的理解和建议。

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

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