我正在致力于将nodejs应用程序容器化,以便在GKE上运行。package.json的脚本部分如下所示
"scripts": {
"dev": "npm-run-all --parallel dev:build-server dev:build-client dev:server",
"dev:server": "nodemon -L --watch build --exec node build/bundle.js",
"dev:build-server": "webpack --config webpack.server.js --watch",
"dev:build-client": "webpack --config webpack.client.js --watch"
}, 因此,在运行im时,使用npm run dev来启动它们。
当它在VM上运行时,它可以完美地工作。但是,当在kubernetes中作为容器运行时,nodemon进程不会启动。它也不会监听端口。它在浏览器上显示502状态错误
但是,当您ssh到pod并尝试运行该命令时,它会在3001端口上启动process.listens,但显然它会给出浏览器上找不到的路由。因为它们没有像预期的那样链接在一起。
下面是dockerfile
FROM node:10.19-stretch
ENV USER="vue" UID="1001"
RUN apt-get update --fix-missing
RUN apt-get install -yq curl
RUN rm /bin/sh && ln -s /bin/bash /bin/sh && \
mkdir -p /opt/vue && \
addgroup --system -gid $UID $USER && \
adduser --system --uid $UID --gid $UID $USER
WORKDIR /opt/vue
COPY dashboard/. /opt/vue/
RUN npm cache clean --force && \
npm install && \
npm cache verify && \
chown $USER.$USER -R /opt/vue
USER $USER
EXPOSE 3001
# ENTRYPOINT ["/usr/bin/dumb-init","--"]
# CMD ["npm run dev"]
CMD ["npm", "run", "dev" ]尝试使用基础镜像(node:10.19-stretch,node:10.19.0-alpine3.11),有些人建议安装inotify,但即使这样也不起作用。我错过了什么。请帮帮忙。
更新
当在docker或kubernetes标准输出日志中运行时,日志显示没有错误(启用详细输出)
[nodemon] Looking in package.json for nodemonConfig
Usage: nodemon [nodemon options] [script.js] [args]
See "nodemon --help" for more.
[nodemon] exiting发布于 2021-11-12 09:08:44
经过同行评审并将其发布到其他网络后,找到了正确的答案。
背后的问题很明显。在脚本部分,所有的dev:*脚本都是并行运行的。因此,当两个构建步骤运行时,nodemon服务试图启动该服务。因为build/bundle.json不在那里,所以它给出了一个未找到的文件。但是nodemon认为它是无效参数,并提供命令帮助。
因此,我所做的就是通过运行以下命令在docker文件中添加构建步骤
npm run dev然后在CMD上添加
npm run prod:server这实际上也加快了启动时间。
下面是更改后的dockerfile部分。
RUN npm cache clean --force && \
npm install && \
npm cache verify && \
chown $USER.$USER -R /opt/vue
USER $USER
EXPOSE 3001
CMD ["npm", "run", "prod:server" ]此外,我已经删除了nodemon,因为它不需要。因为文件无论如何都不会更改,而且它们太大了
"scripts": {
"dev": "npm-run-all --parallel dev:build-server dev:build-client",
"prod:server": "node build/bundle.js",
"dev:build-server": "webpack --config webpack.server.js --watch",
"dev:build-client": "webpack --config webpack.client.js --watch"
},终于..。!!维奥拉。啊,真灵。
感谢为此付出宝贵时间的每一个人。
https://stackoverflow.com/questions/69807888
复制相似问题