我很抱歉我的新手问题,但我有一个糟糕的一天搞清楚这个错误,我有一个Express应用程序,我试图在docker compose中运行它。 我用过这个Dockerfile:
FROM mhart/alpine-node
RUN mkdir -p /usr/src/app
RUN chmod -R 777 /usr/src/app
WORKDIR /usr/src/app
RUN npm install node-gyp -g
RUN npm install nodemon -g
ENV NODE_ENV development
EXPOSE 3000
我的docker-compose文件的这一部分:
backend:
mem_limit: 100m
build:
context: .
dockerfile: dockerfiles/node/Dockerfile
command: npm start
depends_on:
- mongo
- elasticsearch
volumes:
- ./backend/:/usr/src/app
ports:
- 3000:3000
links:
- "mongo:mongo"
- "elasticsearch:elasticsearch"
当我做docker-compose时,我收到了这个错误:
backend_1 | npm info it worked if it ends with ok
backend_1 | npm info using npm@3.10.10
backend_1 | npm info using node@v6.9.5
backend_1 | npm info lifecycle service-designer@1.0.0~prestart: service-designer@1.0.0
backend_1 | npm info lifecycle service-designer@1.0.0~start: service-designer@1.0.0
backend_1 |
backend_1 | > service-designer@1.0.0 start /usr/src/app
backend_1 | > nodemon index.js
backend_1 |
backend_1 | [nodemon] 1.11.0
backend_1 | [nodemon] to restart at any time, enter `rs`
backend_1 | [nodemon] watching: *.*
backend_1 | [nodemon] starting `node index.js`
backend_1 | module.js:471
backend_1 | throw err;
backend_1 | ^
backend_1 |
backend_1 | Error: Cannot find module 'dotenv'
backend_1 | at Function.Module._resolveFilename (module.js:469:15)
backend_1 | at Function.Module._load (module.js:417:25)
backend_1 | at Module.require (module.js:497:17)
backend_1 | at require (internal/module.js:20:19)
backend_1 | at Object.<anonymous> (/usr/src/app/index.js:1:63)
backend_1 | at Module._compile (module.js:570:32)
backend_1 | at Object.Module._extensions..js (module.js:579:10)
backend_1 | at Module.load (module.js:487:32)
backend_1 | at tryModuleLoad (module.js:446:12)
backend_1 | at Function.Module._load (module.js:438:3)
backend_1 | [nodemon] app crashed - waiting for file changes before starting...
如果我在 后端 容器中ls -al
,我会获得后端应用文件夹内容的完整列表,但听起来似乎不是node_modules依赖项识别。
答案 0 :(得分:14)
您需要在容器中安装依赖项,Dockerfile中缺少这些依赖项。
常见的方法是创建一个已经知道您的应用程序的Dockerfile,并将其复制到package.json
文件并执行npm install
。
这允许您的容器在以后运行应用程序时找到所有代码依赖项。
在此查看和示例: https://nodejs.org/en/docs/guides/nodejs-docker-webapp/
示例Dockerfile
:
FROM node:boron
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
# Bundle app source
COPY . /usr/src/app
EXPOSE 8080
CMD [ "npm", "start" ]
当然,您可能需要调整COPY
命令的路径。
答案 1 :(得分:4)
将 npm install
添加到 Dockerfile 后,将 node_modules 添加到卷
volumes:
- ./backend/:/usr/src/app
- /usr/src/app/node_modules
答案 2 :(得分:1)
如果您的Dockerfile
和package.json
文件正确但仍然存在问题,请运行
docker-compose down -v
在使用docker-compose up
重新启动容器之前可能会有所帮助。
它将删除所有卷。
答案 3 :(得分:1)
今天我在运行def hurricane_zip(names, months, years, max_sustained_winds, areas_affected,
new_damages, deaths):
new_dict = {'hurricaneList': []}
new_zip = {}
for index in range(0,34):
new_zip.update({"Name": names[index], "Month": months[index], "Year": years[index], "Max Sustained Wind": max_sustained_winds[index], "Areas Affected": areas_affected[index], "Damage": new_damages[index], "Deaths": deaths[index]})
new_dict['hurricaneList'].append(new_zip)
return new_dict
test = hurricane_zip(names, months, years, max_sustained_winds, areas_affected, new_damages, deaths)
print(test)
时也遇到了同样的问题。
通过运行docker-compose up
而不是docker-compose up --build
解决了该问题。