Docker运行Node容器报错Cannot find module './common/config/config'如何解决
问题原因
你当前的Dockerfile存放在alerts-service目录下,默认的Docker构建上下文就是该目录,COPY指令只能读取上下文范围内的文件,存放在上层目录的common文件夹不在构建上下文范围内,不会被复制到容器内,因此会触发模块找不到的报错。
解决方案
方案1:调整构建上下文(最直接)
将Docker构建的根目录调整为上层的NODEJS-SERVICES目录,同时修改Dockerfile的复制逻辑:
- 修改
alerts-service内的Dockerfile内容:
FROM node:12 ENV PORT=8080\ # 注意这里要改成容器内的实际路径,不要用本地路径 CONFIG_FOLDER=/alerts/common/config \ CONFIG_NAME=configuration.json WORKDIR /alerts # 复制alerts-service的依赖文件 COPY ["alerts-service/package.json", "alerts-service/package-lock.json*", "./"] RUN npm install # 复制alerts-service的业务代码 COPY alerts-service/ . # 复制公共的common目录到容器内对应路径 COPY common/ ./common/ EXPOSE 1400 CMD [ "node", "index.js" ]
- 到本地
NODEJS-SERVICES目录下执行构建命令,指定Dockerfile路径:docker build -t alerts-service -f ./alerts-service/Dockerfile .
方案2:封装公共依赖包
如果有多个服务都依赖common目录的内容,可以把该目录封装为私有npm包,在alerts-service的package.json中声明依赖,构建时通过npm install自动安装到容器内,不需要额外处理复制逻辑。
注意事项
你原Dockerfile中CONFIG_FOLDER配置的是本地电脑的文件路径,容器内部不存在该路径,必须修改为容器内对应的实际路径,否则后续配置初始化也会失败。
内容的提问来源于stack exchange,提问作者Roman Sterlin
相关产品推荐
相关产品推荐

