2016-03-28 14 views
6

Ho il seguente docker-compose.yml:Perché il comando docker-compose fallisce mentre il comando di esecuzione finestra mobile ha esito positivo?

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 

Edit: e la seguente 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 

Se corro docker-compose up il comando carton exec ... fallisce:

$ 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 
... 

Tuttavia, se corro lo stesso comando manualmente sul contenitore, ha esito positivo:

$ 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/ 

Qualche idea su cosa è diverso tra i due comandi?

Per riferimento a carton è come Bundler per Perl. Utilizzando carton exec necessario impostare l'ambiente Perl in modo che i percorsi di libreria corrispondenti sono compresi che contengono tutte le dipendenze specifiche applicazioni - come opere con il comando docker run.

risposta

2

Possiamo vedere il Dockerfile che viene costruito, per favore? (Mi manca la reputazione di chiedere in un commento Edit:.! Grazie)

(Edit :)

Una differenza che noto è che si sta montaggio .-/code nella vostra finestra mobile-composizione file, ma non lo sei quando esegui il comando manualmente. Non ho familiarità con Carton in particolare, ma se sta creando artefatti all'interno di /code quando stai eseguendo carton install nel Dockerfile, potresti averli persi a causa della definizione di docker-comporre volumes.

+0

Certo, ho aggiunto il Dockerfile pure. Il contenitore web è già stato costruito da questo punto. –

+0

Puoi ampliare ciò che intendi per definizione dei volumi? I manufatti librerie sono installati sotto la directory di codice in modo che questo suona come l'area a destra .. –

+0

Okay, ho commentato la definizione 'volumes' ed ora si avvia. Penso di averlo copiato da un esempio di Django o Rails, avrò bisogno di cercare quello che fa ma sono un passo avanti adesso! Come effettivamente visualizzo la mia applicazione in un browser sarà la prossima sfida. Grazie. –

Problemi correlati