最近在部署一个较为复杂的 web 应用,其中涉及到 mongodb redis php node cron。为了简化部署,想到了使用 docker 部署。
使用 node 时,可以使用 node 的官方 image。
其 docker-compose.yaml 可以如下配置
1 | version: "2" |
发现,安装好了之后,不能执行 build。是因为 build 中引入了 webpack,而 webpack 是在 devDependencies 中定义的。
比较奇怪的是,在 自己的开发机 上是可以直接 npm install 安装 webpack,在 docker 容器中不可以。
初步怀疑是 images 搭载的操作系统问题。最后换了个镜像,依然不行。
最后发现,是 npm config 的问题。
执行1
2
3
4
5
6
7➜ ~ npm config ls -l | grep pro
https-proxy = null
noproxy = null
production = false
progress = true
proxy = null
save-prod = false
我们看到 production=false
,在这种模式下,npm install 就会安装 devDependencies ,而 docker 容器中执行 npm config ls -l | grep pro
后发现, production=true。这就是问题所在。
更新 docker-compose.yaml
1 | version: "2" |
修改 NODE_ENV 为 development 即可。
虽然看起来是很小的问题,确着实花了好长时间去排错调试。特此记录!
参考资料: