2016-03-28 15 views
6

私は、次のdocker-compose.ymlを持っている:docker runコマンドが成功したときに、このdocker-composeコマンドが失敗するのはなぜですか?

db: 
    image: postgres 
search: 
    image: elasticsearch 
web: 
    build: . 
    working_dir: /code 
    environment: 
     CATALYST_CONFIG_LOCAL_SUFFIX: development 
    volumes: 
     - .:/code 
    ports: 
     - "8000:8000" 
    links: 
     - db 
     - search 
    command: carton exec plackup -E development bicycleevents_web.psgi -p 8000 

編集:と、次のDockerfile:

FROM ubuntu:latest 

RUN apt-get update 
RUN apt-get install -y --force-yes build-essential curl libssl-dev postgresql-client libpq-dev perl-doc 
RUN apt-get clean 

RUN curl -L https://cpanmin.us | perl - --sudo App::cpanminus 
RUN cpanm Carton 
RUN mkdir /code 
WORKDIR /code 
ADD . /code/ 
RUN rm -rf /code/local/ 
RUN carton install 

私はdocker-compose upを実行した場合carton exec ...コマンドは失敗します。ただし

$ docker-compose up 
... 
Starting bicycleeventsweb_web_1 
web_1 | Error while loading /code/bicycleevents_web.psgi: Can't locate Moose.pm in @INC (you may need to install the Moose module) (@INC contains: /code/lib /code/local/lib/perl5 /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at /code/lib/BicycleEvents/Web.pm line 2. 
web_1 | BEGIN failed--compilation aborted at /code/lib/BicycleEvents/Web.pm line 2. 
web_1 | Compilation failed in require at /code/bicycleevents_web.psgi line 6. 
web_1 | BEGIN failed--compilation aborted at /code/bicycleevents_web.psgi line 6. 
bicycleeventsweb_web_1 exited with code 2 
... 

、私が実行した場合同じコマンドをコンテナで手動で実行すると、成功します。

$ docker run -i -t -e "CATALYST_CONFIG_LOCAL_SUFFIX=development" bicycleeventsweb_web carton exec plackup -E development bicycleevents_web.psgi -p 8000 
... 
HTTP::Server::PSGI: Accepting connections at http://0:8000/ 

2つのコマンドの違いは何ですか?

cartonは、Bundler for Perlと同じです。 carton execを使用すると、docker runコマンドで動作するように、すべてのアプリケーション固有の依存関係を含む適切なライブラリパスが含まれるように、Perl環境をセットアップする必要があります。

答えて

2

ビルド中のDockerfileを確認できますか? (私はコメントで聞いて評判が不足している編集:。!おかげ

(編集:)

私が気づく一つの違いは、あなたのドッキングウィンドウ・コンで./codeにをマウントしているということですただし、手動でコマンドを実行しているのではありません。私はCartonに詳しくは分かりませんが、Dockerfileでcarton installを実行しているときに/codeの中にアーティファクトが作成されていると、docker-compose volumes定義の結果として失われている可能性があります。

+0

もちろん、Dockerfileも追加しました。 Webコンテナは、この時点ですでに構築されています。 –

+0

ボリューム定義の意味を広げることができますか?ライブラリのアーティファクトはコードディレクトリの下にインストールされ、正しい領域のように聞こえます。 –

+0

さて、 'volumes'の定義をコメントしました。私はDjangoやRailsの例からそれをコピーしたと思うが、それが何をしているのかを調べる必要があるだろうが、私は今一歩進んでいる!ブラウザで実際にアプリケーションを表示する方法は次の課題です。ありがとう。 –

関連する問題