У меня есть следующие docker-compose.yml
:Почему команда docker-compose завершается неудачно, когда команда запуска docker завершается успешно?
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: и следующие 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/
Любые мысли о том, что отличается между двумя командами?
Для справки carton походит на Bundler для Perl. Использование carton exec
должно настроить среду Perl так, чтобы были включены соответствующие пути библиотеки, которые содержат все зависимые от приложения зависимости, - как работает с командой docker run
.
Конечно, я добавил файл Docker. К этому моменту уже создан веб-контейнер. –
Можете ли вы рассказать о том, что вы подразумеваете под определением томов? Артефакты библиотеки устанавливаются под каталогом кода, поэтому это звучит как правильная область. –
Хорошо, я прокомментировал определение «томов», и теперь оно начинается. Я думаю, что я скопировал это из примера Django или Rails, мне нужно посмотреть, что он делает, но я уже шаг! То, как я действительно просматриваю свое приложение в браузере, станет следующей задачей. Благодарю. –