如何在Docker容器中运行Lektor?

时间:2016-11-09 10:30:08

标签: python docker lektor

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

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

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

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

Started build Debugging middleware caught exception in streamed response at a point where response headers were already sent. Traceback (most recent call last): File "/usr/local/lib/lektor/lib/python2.7/site-packages/lektor/admin/utils.py", line 18, in generate for event in chain(f(*args, **kwargs), (None,)): File "/usr/local/lib/lektor/lib/python2.7/site-packages/lektor/admin/modules/api.py", line 309, in generator for event in event_iter: File "/usr/local/lib/lektor/lib/python2.7/site-packages/lektor/publisher.py", line 639, in publish self.link_artifacts(path) File "/usr/local/lib/lektor/lib/python2.7/site-packages/lektor/publisher.py", line 602, in link_artifacts link(full_path, dst) OSError: [Errno 18] Invalid cross-device link

最小的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: version: '2' services: web: build: . ports: - "5000:5000" volumes: - .:/project working_dir: /project/source command: ['lektor', 'server', '--host', '0.0.0.0.']

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

1 个答案:

答案 0 :(得分:1)

lektor构建过程使用硬链接和构建文件的临时文件夹。如果源代码位于已安装的卷上(它位于docker卷中),则两个文件系统不同,链接将失败,如上所述。

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

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