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
.
Certo, ho aggiunto il Dockerfile pure. Il contenitore web è già stato costruito da questo punto. –
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 .. –
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. –