ドッカーのコンテナ内で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
を
私は実際にドッカーの作成を使用しています。
最小ドッキングウィンドウ-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フォルダが「ソース」のサブフォルダにあるように構成されています)。
「無効なクロスデバイスリンク」の簡単なgoogleは、シンボリックリンクを使って何かを示しています。 Lektorは公開時に何をしますか(聞いたことがありますが、それを使用していません)。コンテナ内のボリュームと何かの間にシンボリックリンクを作成しようとしている可能性はありますか?おそらくそこに問題がありますか?おそらく許可。始める場所のようです。 – johnharris85
はい、lektorはリンクを使用しようとしていますが、ボリュームのマウント方法は嫌いです。 – Owen
ビルドプロセスではハードリンクが使用され、出力フォルダはソースコードのパスに含まれていないようです。ソースコードはマウントされたボリュームであり、ビルドフォルダはコンテナ内の他の場所にあるため、2つのファイルシステムは異なり、ハードリンクは失敗します。 – Owen