docker-compose up给出错误:bash:sails:command not found

时间:2016-06-21 17:43:35

标签: docker sails.js docker-compose

我有一个docker-compose.yml文件,其中包含以下内容:

version: '2'

services:
 MongoDB:
   image: mongo

 Parrot-API:
   build: ./Parrot-API
   image: sails-js:dev
   volumes:
    - "/user/Code/node/Parrot-API:/host"
   command: bash -c "cd /host && sails lift"
   links:
    - MongoDB:MongoDB
   ports:
    - "3050:1337"

该文件基本上运行两个容器:在sails.js中构建的mongodb和web app(在目录./Parrot-API中)。但是,当我在终端中运行docker-compose up时,出现此错误: Parrot-API_1 | bash:sails:找不到命令 node_Parrot-API_1退出,代码为127 。请注意,sails.js是一个node.js Web框架,sails lift在端口1337启动应用程序。

我做了一些谷歌搜索并找到了一些类似的问题,但对我的情况没有帮助。

顺便说一句,我在Parrot-API文件夹中有以下Dockerfile

FROM sails-js:dev
VOLUME /host
WORKDIR /host
RUN rm -rf node_modules && \
        echo "hello world!" && \
        pwd && \
        ls -lrah
EXPOSE 1337
CMD npm install -g sails && npm install && sails lift

文件结构如下:

|- docker-compose.yml
|- Parrot-API/Dockerfile
|- Parrot-API/app.js, etc..

我很清楚Parrot-API docker容器由于没有执行sails lift命令而立即退出,但如何使容器工作?谢谢!

1 个答案:

答案 0 :(得分:2)

你展示了一个构建sails-js:dev镜像的docker-compose.yml,你展示了一个基于sails-js:dev镜像的Dockerfile。这似乎是递归的。

您的Dockerfile本身以CMD结束,而不是执行npm安装帆的ENTRYPOINT。由于您是以CMD而不是RUN的方式执行此操作,因此在您的映像中未安装sails,安装是在容器运行时启动的,但前提是您不使用自己的任何参数运行容器,就像您正在执行的那样在docker-compose.yml中使用自定义命令。

修复方法是使用正确的基本映像更新Dockerfile并将CMD更改为RUN。我还看到了一些其他错误,例如创建卷然后修改内容,其中卷在创建后忽略其他更改。 FROM node只是基于你的npm命令的猜测,随意调整:

FROM node
RUN mkdir -p /host && cd /host && npm install -g sails && npm install
EXPOSE 1337
WORKDIR /host
VOLUME /host
CMD sails lift
相关问题