node.js-Nodemon使我的Kubernetes部署崩溃(node_modules导致问题)

前端之家收集整理的这篇文章主要介绍了node.js-Nodemon使我的Kubernetes部署崩溃(node_modules导致问题) 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我一直在与kubernetes纠缠不清,我正在尝试使用minikube,node和nodemon设置开发环境.如果我在独立容器中运行映像,则可以正常工作,但是如果将映像放入部署中,则会崩溃并显示以下错误.

  1. yarn run v1.3.2
  2. $nodemon --legacy-watch --exec babel-node src/index.js
  3. /app/node_modules/.bin/nodemon:2
  4. 'use
  5. ^^^^^
  6. SyntaxError: Invalid or unexpected token
  7. at createScript (vm.js:80:10)
  8. at Object.runInThisContext (vm.js:139:10)
  9. at Module._compile (module.js:599:28)
  10. at Object.Module._extensions..js (module.js:646:10)
  11. at Module.load (module.js:554:32)
  12. at tryModuleLoad (module.js:497:12)
  13. at Function.Module._load (module.js:489:3)
  14. at Function.Module.runMain (module.js:676:10)
  15. at startup (bootstrap_node.js:187:16)
  16. at bootstrap_node.js:608:3
  17. error Command Failed with exit code 1.
  18. info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

我的package.json中有一个dev命令

  1. "dev": "nodemon --legacy-watch --exec babel-node src/index.js",

我的映像正在使用以下docker文件构建

  1. FROM node:8.9.1-alpine
  2. WORKDIR /app
  3. COPY . /app/
  4. RUN cd /app && yarn install

我的部署就是这样设置的

  1. ---
  2. apiVersion: apps/v1beta1
  3. kind: Deployment
  4. Metadata:
  5. labels:
  6. app: nodeapp
  7. name: nodeapp
  8. spec:
  9. replicas: 3
  10. selector:
  11. matchLabels:
  12. app: nodeapp
  13. template:
  14. Metadata:
  15. labels:
  16. app: nodeapp
  17. spec:
  18. containers:
  19. - name: nodeapp
  20. imagePullPolicy: Never
  21. image: app:latest
  22. command:
  23. - yarn
  24. args:
  25. - run
  26. - dev
  27. ports:
  28. - containerPort: 8080
  29. volumeMounts:
  30. - name: code
  31. mountPath: /app
  32. volumes:
  33. - name: code
  34. hostPath:
  35. path: /Users/adam/Workspaces/scratch/expresssite
  36. ---
  37. apiVersion: v1
  38. kind: Service
  39. Metadata:
  40. name: nodeapp
  41. labels:
  42. app: nodeapp
  43. spec:
  44. selector:
  45. app: nodeapp
  46. ports:
  47. - name: nodeapp
  48. port: 8080
  49. nodePort: 30005
  50. type: NodePort
  51. ---

它显然在nodemon binstub中的“使用严格”上崩溃了,但是我不知道为什么.作为独立的docker容器,它可以正常工作.目的是让我在保存更改以进行开发时让nodemon在每个pod中重新启动节点进程,但是我不确定自己的错误在哪里.

编辑:

我已经稍微缩小了范围.它正在从文件主机挂载node_modules,这就是导致它崩溃的原因.我确实有一个.dockerignore文件设置.有没有办法让它像这样工作(因此,如果我运行npm install,它将接管所做的更改)还是有办法让它使用与映像一起安装的node_modules?

最佳答案
将本地计算机的node_modules挂载到容器时,存在几个问题,例如:

1)node_modules具有本地符号链接,这些符号链接很难在您的容器内部解析.

2)如果您有依赖于本机二进制文件的依赖项,则将为您在其上安装依赖项的操作系统编译它们.如果将它们安装到其他操作系统,则运行这些二进制文件会出现问题.您是否正在Win / Mac上运行npm install并将其从上图安装到基于linux的容器中?然后,这很可能是您的问题.

在Kubernetes吊舱/容器内直接开发软件时,我们团队遇到了完全相同的问题.这就是为什么我们启动了一个名为DevSpace CLI的开源项目:https://github.com/covexo/devspace

DevSpace CLI可以在本地文件夹和开发容器中的文件夹之间建立可靠且超快速的2路代码同步(适用于任何Kubernetes集群,任何卷,甚至适用于临时/非永久文件夹),并且可以正常工作与热加载工具(例如nodemon)完美配合.让我知道它是否适合您,或者您缺少什么.

猜你在找的Docker相关文章