Skip to main content
 首页 » 编程设计

python之如何在 Docker 容器中运行 Lektor

2024年10月17日28cloudgamer

我试图在 docker 容器中运行 lektor,但遇到了问题。

如果我在我的 Dockerfile 中“添加”(或“复制”)我的源代码文件夹,一切都会完美运行,但是,当然,容器不是动态的并且不会响应代码中的更改。

相反,如果我使用卷,则容器会变成动态的,lektor 会在我进行更改时成功重建并为我的网站提供服务。

但是,当我发布站点时,容器的日志中出现错误,并进入了一个永无止境的循环:

开始构建 调试中间件在已发送响应 header 的位置捕获流式响应中的异常。 追溯(最近一次通话): 生成文件“/usr/local/lib/lektor/lib/python2.7/site-packages/lektor/admin/utils.py”,第 18 行 对于链中的事件(f(*args,**kwargs),(无,)): 生成器中的文件“/usr/local/lib/lektor/lib/python2.7/site-packages/lektor/admin/modules/api.py”,第 309 行 对于 event_iter 中的事件: 发布文件“/usr/local/lib/lektor/lib/python2.7/site-packages/lektor/publisher.py”,第 639 行 self.link_artifacts(路径) 文件“/usr/local/lib/lektor/lib/python2.7/site-packages/lektor/publisher.py”,第 602 行,在 link_artifacts 链接(完整路径,dst) OSError: [Errno 18] 无效的跨设备链接

最小 Dockerfile:

FROM python:2.7.11 
 
RUN curl -sf https://www.getlektor.com/install.sh | \ 
  sed '/stdin/d;s/input = .*/return/' | \ 
  sh 

我实际上在使用 docker-compose。

最小的 docker-compose.yml: 版本:'2' 服务: 网页: build : 。 端口: - “5000:5000” 卷: - 。:/项目 工作目录:/项目/源 命令:['lektor', 'server', '--host', '0.0.0.0.']

(我的项目文件夹的结构使得 lektor 项目文件和所有预期的 lektor 文件夹都在“源”子文件夹中)。

请您参考如下方法:

lektor 构建过程使用硬链接(hard link)和用于构建文件的临时文件夹。如果源代码在挂载的卷上(它在 docker 卷中),则两个文件系统不同并且链接失败,如上所示。

通过命令行部署和构建并指定输出路径可以解决这个问题(此处描述:https://www.getlektor.com/docs/deployment/),但这不是 Docker 容器中的一个很好的解决方案,其目的是让生活尽可能简单.

在某些情况下,在 lektor 中进行链接的方法实际上会退回到复制。我创建了一个问题 (https://github.com/lektor/lektor/issues/315),表明如果项目和输出文件夹位于不同的卷上,也会发生回退。我怀疑这会妥善解决问题。