2016-03-28 2 views
6

У меня есть следующие 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.

ответ

2

Можем ли мы увидеть файл Dockerfile, который строится, пожалуйста? (Мне не хватает репутации, чтобы спросить в комментариях редактирование:.! Спасибо)

(Edit :)

Одна разница я замечаю, что вы крепления . к /code в вашем Докер-композе файл, но вы не выполняете команду вручную. Я не знаком с Carton специально, но если он создает артефакты внутри /code, когда вы выполняете carton install в файле Docker, вы можете потерять их в результате определения вашеговашего docker-compose.

+0

Конечно, я добавил файл Docker. К этому моменту уже создан веб-контейнер. –

+0

Можете ли вы рассказать о том, что вы подразумеваете под определением томов? Артефакты библиотеки устанавливаются под каталогом кода, поэтому это звучит как правильная область. –

+0

Хорошо, я прокомментировал определение «томов», и теперь оно начинается. Я думаю, что я скопировал это из примера Django или Rails, мне нужно посмотреть, что он делает, но я уже шаг! То, как я действительно просматриваю свое приложение в браузере, станет следующей задачей. Благодарю. –

Смежные вопросы