我有一个Angular应用程序,我与Nginx一起使用Docker打包。我的Dockerfile如下:
FROM node:8.11.3 as node
WORKDIR /app
COPY package.json /app/
RUN npm install
COPY ./ /app/
ARG env=prod
RUN npm run build -- --prod --environment $env
FROM nginx:1.13
COPY --from=node /app/dist/ /usr/share/nginx/html
RUN rm /etc/nginx/conf.d/default.conf
COPY ./nginx-custom.conf /etc/nginx/conf.d/default.conf
EXPOSE 4200
CMD ["npm", "start"]
我建立了我的 Docker 镜像,但是当我开始执行 docker run 命令时,我收到以下错误消息:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"npm\": executable file not found in $PATH": unknown.
如果我从Dockerfile中删除最后一个命令(CMD ["npm","start"]),我可以运行我的docker镜像 - 它可以工作。但我猜我需要最后一个命令,这样我就可以在AWS上部署和运行我的应用程序。同时 'CMD npm start' 不起作用。我看过一些类似问题的帖子,但是没有解决方案对我有用。更新:
我删除了最后一行 - CMD npm start。ECS现在正在尝试启动我的任务 - 但它以退出代码1停止,并没有进一步的评论。有任何想法吗?
谢谢, Michael
npm start
命令。该命令是用于创建开发过程中使用的开发服务器。请参阅https://angular.io/guide/deployment。此外,如果您想在AWS上运行它,将其作为静态内容提供而不是Docker映像将更便宜。 - user184994FROM
指令会覆盖第一个,因此在运行CMD
时可能没有可用的npm
可执行文件。请参考此链接: https://dev59.com/oFwX5IYBdhLWcg3w2SZq - Sergii Vorobeinpm start
,也没有必要访问端口4200,因为nginx可能正在侦听80,并且端口4200代表开发服务器。 - user184994