node.js - 使用 docker 时,npm 库不工作
问题描述
我尝试 Dockerize 一个使用 webpack 的 React 应用程序。当我在本地(在 MacOS 上)运行我的应用程序时,一切正常。
但是当我使用 docker 时,出现以下错误:
ERROR in ./src/containers/fenetre_log.jsx
Module not found: Error: Can't resolve 'ROSLIB' in '/usr/src/app/src/containers'
奇怪的是,roslib 在我的 package.json 中被很好地声明为依赖项......
这是我的 package.json:
{
"license": "UNLICENSED",
"devDependencies": {
"babel-core": "^6.26.0",
"babel-eslint": "^8.0.0",
"babel-loader": "^7.1.2",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"css-loader": "^0.28.7",
"eslint": "^4.6.1",
"eslint-config-airbnb": "^15.1.0",
"eslint-plugin-import": "^2.7.0",
"eslint-plugin-jsx-a11y": "^5.1.1",
"eslint-plugin-react": "^7.3.0",
"gh-pages": "^1.1.0",
"html-loader": "^0.5.1",
"html-webpack-plugin": "^3.2.0",
"node-sass": "^4.12.0",
"sass-loader": "^6.0.6",
"style-loader": "^0.18.2",
"webpack": "^4.26.1",
"webpack-cli": "^3.1.2",
"webpack-dev-server": "^3.1.10"
},
"dependencies": {
"net": "^1.0.2",
"react": "16.2",
"react-dom": "16.2",
"react-redux": "^5.0.6",
"redux": "^3.7.2",
"redux-logger": "^3.0.6",
"redux-promise": "^0.6.0",
"roslib": "^1.1.0"
},
"scripts": {
"start": "webpack-dev-server --mode development --host 0.0.0.0",
"lint": "eslint './src/**/*.js' './src/**/*.jsx'",
"deploy": "webpack -p && gh-pages -d dist"
}
}
这是我的 Dockerfile:
# Docker Image which is used as foundation to create
# a custom Docker Image with this Dockerfile
FROM node:10
# A directory within the virtualized Docker environment
# Becomes more relevant when using Docker Compose later
WORKDIR /usr/src/app
# Copies package.json and package-lock.json to Docker environment
COPY package*.json ./
# Installs all node packages
RUN npm install
# Copies everything over to Docker environment (except the .dockerignore files {cf bellow})
COPY . .
# Uses port which is used by the actual application
EXPOSE 8080
# Finally runs the application
CMD [ "npm", "start" ]
您认为错误消息来自哪里?
这是我用来构建和运行容器的命令:
docker build -t front-end .
docker run -tid --name front-end front-end
然后我检查了日志:
docker logs front-end
这是 .dockerignore :
/node_modules
解决方案
如果没有错误产生的实际代码,就很难查明问题所在。如果由于某种原因您不能公开分享您的代码,您可以尝试以下方法:
- 使用 docker 调试 docker 映像中的问题,它为您提供 shell 访问权限。
docker run -it [IMAGE_ID] sh
- 如果遵循正确的套管,请检查您的进口。显然有些人遇到了类似的问题,在 OSX 中导入的模块不区分大小写,但在 linux 中则不然。
https://github.com/JeffreyWay/laravel-mix/issues/1741
- 也许您要查找的包已安装在您的全局 npm 模块中,并且未包含在 package.json 中。这导致模块未安装在 docker 映像中。
希望这可以帮助。
推荐阅读
- python - 安装 COCOAPI for python 3.5.2
- excel - ADODB 查询的 Excel 工作表名称问题
- angular - angular-material-fileupload 'fileUploadInputFor' 因为它不是 'div' 的已知属性
- docker - 使用 Docker Compose 进行主机解析不能使用自定义主机名
- c# - ScrollViewer:通过按钮缩放到当前页面的中心
- ios - AWS 用户池和 Google 联合身份验证
- java - 由 java.lang.ClassNotFoundException 导致找不到类“com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver
- python - 缩短 for 循环以获取路径
- php - laravel Blade @lang() 本地化中的多元化?
- python-3.x - 在python 3中将浮点数转换为字符串