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