docker – 组成了错误:bash:sails:找不到命令

我有一个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" 

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

我做了一些谷歌search,并发现了一些类似的问题,但在我的情况没有帮助。

顺便说一下,我有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-APIdocker集装箱因为没有执行sails lift命令的原因而立即退出,但如何使集装箱工作? 谢谢!

你展示了一个docker-compose.yml,它构build了一个sails-js:dev镜像,并且显示了一个基于sails-js:dev镜像的Dockerfile。 这似乎是recursion的。

你的Dockerfile本身以CMD代替进入npm安装的入口点。 由于您是以CMD而不是RUN的方式运行的,因此您的映像中没有安装sails,而是在容器运行时启动安装,但是只有在您不使用自己的任何参数运行容器时才如此在docker-compose.yml中使用自定义命令。

解决方法是用适当的基础映像更新Dockerfile,并将CMD更改为RUN。 我还看到一些其他的错误,比如创build一个卷然后修改其中的内容,其中卷在创build后忽略其他更改。 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