首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Docker CMD不识别pm2-runtime

Docker CMD不识别pm2-runtime
EN

Stack Overflow用户
提问于 2019-06-19 22:54:52
回答 2查看 3.1K关注 0票数 2

我试图构建一个结合了nginx和pm2的docker镜像,但是当我尝试像this一样执行pm2时,我得到了以下错误:

代码语言:javascript
运行
复制
/bin/sh: [pm2-runtime,: not found

奇怪的是,如果我覆盖CMD并像这样使用它:

代码语言:javascript
运行
复制
sudo docker run -it -p 80:80 frontend-test pm2-runtime

它会识别出安装了pm2(-runtime)。有谁知道黑魔法是怎么发生的吗?在以前的版本中,我生成nuxt页面,并通过Nginx静态地提供它们,但现在我想将其转换为使用nuxt的SSR模式。我的目标是运行这个应用程序,然后通过Nginx反向代理(这似乎是可行的,除了pm2不想运行)。提前感谢!

下面是我的Dockerfile的一个(稍微简化的)版本:

代码语言:javascript
运行
复制
### BUILD STAGE ###

FROM node:10-alpine as build-stage
WORKDIR /app

# Copy only package(-lock).json to enable docker caching
COPY /index/package*.json /app/index/

# Install packages before copying source code to use cache where possible
WORKDIR /app/index
RUN npm install

# Copy source code
WORKDIR /app
COPY . .

# Build source code
WORKDIR /app/index
RUN npm run build

### END BUILD STAGE ###

### PRODUCTION STAGE ###

FROM nginx:1.17-alpine as production-stage
ARG env_name=dev

# Install system dependencies (nodejs to run pm2)
RUN apk add --update nodejs nodejs-npm

# Copy transpiled sourcecode to production image
COPY --from=build-stage /app/index/.nuxt /app/index

# Copy config files to production image
WORKDIR /app
COPY deployment/pm2.js ./ecosystem.config.js
COPY deployment/nginx.${env_name}.conf /etc/nginx/nginx.conf

# Install pm2 globally
RUN npm install pm2 -g
RUN pm2 list

EXPOSE 80
CMD ["pm2-runtime", "start", "--env", ${env_name}, "&&", "nginx", "-g", "daemon off;"]

### END PRODUCTION STAGE
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-28 21:33:04

问题是CMD指令不能处理开箱即用的多个命令。

将CMD更改为以下行解决了我的问题:

代码语言:javascript
运行
复制
CMD ["sh", "-c", "nginx && pm2-runtime start ecosystem.config.js --env $env_name"]

Docker CMD & ENTRYPOINT使用sh -c隐式地运行命令,但是要链接命令和/或注入环境变量,您需要将docker中的sh -c与您自己的own“嵌套”。

票数 2
EN

Stack Overflow用户

发布于 2019-06-20 13:03:34

您确定要这样定义CMD吗

CMD [ "pm2-runtime", "start", "pm2.json" ]

因为从我看到的错误消息中可以看出,它正在寻找运行时(注意开头的[和结尾的, ),而且只有在pm2- [pm2-runtime,周围没有引号的情况下,这才是可能的。我建议您删除并再次键入这些引号,保存Dockerfile,然后再次尝试构建。

我只是用一个简单的例子进行了测试。

代码语言:javascript
运行
复制
FROM alpine

CMD [echo, "'A'" ]

并得到类似的错误消息。

代码语言:javascript
运行
复制
/bin/sh: [echo,: not found

所以我很确定情况就是这样

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56670629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档