我有一个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
命令而立即退出,但如何使容器工作?谢谢!
答案 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