gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:26:05 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com