Lo siento por mi pregunta de novato, pero estoy teniendo un día terrible para resolver este error, tengo una aplicación Express y estoy tratando de ejecutarla en docker compose. He usado este 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 3000Y esta parte de mi archivo 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"Cuando docker-compose up, aparece este error:
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... Si hago ls -al en el contenedor de back -end, obtengo una lista completa del contenido de la carpeta de mi aplicación de back-end, pero parece que no se reconocen las dependencias de node_modules.
Debe instalar las dependencias en el contenedor, que falta en su Dockerfile.
La forma común es crear un Dockerfile que ya conozca su aplicación y hacer que copie su archivo package.json y realice una instalación de npm install .
Esto permite que su contenedor encuentre todas las dependencias de su código cuando más tarde ejecute su aplicación.
Vea un ejemplo aquí: https://nodejs.org/en/docs/guides/nodejs-docker-webapp/
El Dockerfile muestra:
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" ] Es posible que deba adaptar las rutas para el comando COPY , por supuesto.
Si sus archivos Dockerfile y package.json son correctos y aún tienen el problema:
Asegúrese de haber reconstruido las imágenes de su contenedor.
Tratar
docker-compose down -v
antes de volver a iniciar los contenedores con docker-compose up .
Esto elimina todos los volúmenes.
También tuve el mismo problema cuando docker-compose up .
Problema resuelto ejecutando docker-compose up --build en lugar de docker-compose up .