Mam następujący docker-compose.yml
:Dlaczego ta komenda tworzenia dokowanego kończy się niepowodzeniem, gdy polecenie uruchamiania dokowanego działa poprawnie?
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: a następnego 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
Jeśli biegnę docker-compose up
komenda carton exec ...
zawiedzie:
$ 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
...
Jednakże, jeśli biegnę to samo polecenie ręcznie na kontenerze, to się uda:
$ 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/
Jakieś przemyślenia na temat tego, co różni się między tymi dwoma poleceniami?
Dla odniesienia carton jest jak Bundler dla Perla. Przy użyciu carton exec
należy skonfigurować środowisko Perla tak, aby zawierały odpowiednie ścieżki biblioteki, które zawierają wszystkie zależne od aplikacji zależności - tak jak działa z poleceniem docker run
.
Oczywiście, dodałem również plik Dockerfile. Pojemnik internetowy został już zbudowany w tym punkcie. –
Czy możesz rozwinąć znaczenie definicji woluminów? Artefakty biblioteki są instalowane w katalogu kodu, więc brzmi to jak właściwy obszar. –
Okay, skomentowałem definicję 'volume' i teraz to się zaczyna. Myślę, że skopiowałem to z przykładu Django lub Rails, muszę sprawdzić, co robi, ale jestem o krok dalej! Fakt, że przeglądam moją aplikację w przeglądarce, będzie kolejnym wyzwaniem. Dzięki. –