2016-11-09 4 views
1

ドッカーのコンテナ内で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フォルダが「ソース」のサブフォルダにあるように構成されています)。

+0

「無効なクロスデバイスリンク」の簡単なgoogleは、シンボリックリンクを使って何かを示しています。 Lektorは公開時に何をしますか(聞いたことがありますが、それを使用していません)。コンテナ内のボリュームと何かの間にシンボリックリンクを作成しようとしている可能性はありますか?おそらくそこに問題がありますか?おそらく許可。始める場所のようです。 – johnharris85

+0

はい、lektorはリンクを使用しようとしていますが、ボリュームのマウント方法は嫌いです。 – Owen

+0

ビルドプロセスではハードリンクが使用され、出力フォルダはソースコードのパスに含まれていないようです。ソースコードはマウントされたボリュームであり、ビルドフォルダはコンテナ内の他の場所にあるため、2つのファイルシステムは異なり、ハードリンクは失敗します。 – Owen

答えて

0

lektorのビルドプロセスでは、ビルドされたファイルにハードリンクと一時フォルダが使用されます。ソースコードがマウントされたボリューム(ドッカーボリュームにある)にある場合、2つのファイルシステムが異なり、上記のようにリンクが失敗します。

コマンドライン経由での展開とビルド、および出力パスの指定は問題を回避することができます(https://www.getlektor.com/docs/deployment/)。Dockerコンテナ内でできるだけシンプルにすることが目的です。

lektor内でリンクする方法は、実際には状況によっては代わりにコピーに転じます。私は、フォールバックが発生することを提案する問題(https://github.com/lektor/lektor/issues/315)を作成しました。プロジェクトと出力フォルダは異なるボリュームにあります。私はそれが問題を適切に解決するだろうと思う。

関連する問題