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-API
docker集装箱因为没有执行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