为什么这个docker-compose命令在docker run命令成功时失败?

时间:2016-03-28 09:30:25

标签: perl docker docker-compose

我有以下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

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

编辑:和以下Dockerfile:

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 exec

有关这两个命令之间有什么不同的想法吗?

供参考carton就像Bundler for Perl。使用docker run应该设置Perl环境,以便包含包含所有特定于应用程序的依赖项的相应库路径 - 与{{1}}命令一起使用。

1 个答案:

答案 0 :(得分:2)

我们可以看到正在构建的Dockerfile吗? (我缺乏在评论中提问的声誉。编辑:谢谢!

(适用编辑:)

我注意到的一个区别是您在docker-compose文件中将.挂载到/code,但是在手动运行命令时则不然。我并不熟悉Carton,但如果你在Dockerfile中执行/code时在carton install内创建工件,你可能会因为你的docker-compose {{1}而失去它们定义。