我正在尝试在docker容器中运行lektor并遇到问题。
如果我在Dockerfile中“添加”(或“复制”)我的源代码文件夹,则一切运行正常,但是,当然,该容器不是动态的,并且不会响应代码中的更改。
相反,如果我使用一个卷,则该容器将变为动态的,并且在进行更改时,lektor将成功重建并为我的网站提供服务。
但是,当我来发布站点时,容器的日志中会出现一个错误,并进入一个永无止境的循环:Started buildDebugging 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'子文件夹中)。
最佳答案
生成器的构建过程使用硬链接(hard link)和用于构建文件的临时文件夹。如果源代码在已安装的卷(它在docker卷中)上,则两个文件系统是不同的,并且链接如上所述失败。
通过命令行进行部署和构建并指定输出路径可以解决该问题(在此处进行描述:https://www.getlektor.com/docs/deployment/),但这并不是旨在使生活尽可能简单的Docker容器中的好解决方案。
在某些情况下,在lektor中进行链接的方法实际上会退回到复制。我创建了一个问题(https://github.com/lektor/lektor/issues/315),建议如果项目文件夹和输出文件夹位于不同的卷上,也会发生回退。我怀疑这样可以正确解决问题。
关于python - 如何在Docker容器中运行Lektor?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40504793/