docker - docker-compose up给出错误:bash:sails:找不到命令

标签 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"

该文件基本上运行两个容器:mongodb和内置在sails.js中的Web应用程序(在./Parrot-API目录中)。但是,当我在终端中运行docker-compose up时,出现此错误: Parrot-API_1 | bash:帆:找不到命令
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命令,因此sails lift docker容器立即退出,但是如何使容器工作?谢谢!

最佳答案

您展示了一个构建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

关于docker - docker-compose up给出错误:bash:sails:找不到命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37951154/

相关文章:

docker - Docker:在容器内使用非root用户执行命令

Docker 堆栈部署 : unable to set dnsrr as ports are exposed as ingress

api - Sails JS 与 Redis 缓存

node.js - Sails Js 使用 Firebase Waterline Adapter

docker - resolve.conf 无法更改 - docker-alpine

docker - 使用docker-compose链接到网络中的容器

elasticsearch - Docker 日志、标准错误

node.js - 您可以更新 Node :latest吗

node.js - 使用 pkgcloud 为 Rackspace 定制 Skipper 适配器

Docker-compose: ERR_EMPTY_RESPONSE