提问者:小点点

无法在docker内启动节点应用程序


在创建docker内的节点应用程序时,我遇到了以下错误

docker container run -it --rm --volume $(pwd):/usr/src/app -p 7007:3000 sample-app-dev:latest
docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"nodemon server.js\": executable f

我的Dockerfile如下所示

FROM node:12
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
ENV PATH="/usr/src/app:${PATH}"
ENTRYPOINT ["nodemon server.js"]

package.json

{
  "name": "nodedocker",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1",
    "nodemon": "^2.0.4"
  }
}

server.js

const express = require( "express" );

const app = express();
const port = 3000;

app.get( "/", ( req, res ) => {
res.send( "Hello World from express JS!!" );
} );

const hobbies = [
"Swimming", "Diving", "Jogging", "Cooking", "Singing" ] ;

app.get("/hobbies", (req, res) => {
res.send(hobbies);
});

const famous_programming = [
"python", "java", "c", "c++", "JS" ] ;

app.get("/famous_programming", (req, res) => {
    message = famous_programming.includes("node")? "Yaaay, Node.js" : "Yup! Node.js is a framework from JS" ; 
    res.send(message);
});

app.listen( port, () => {
console.log( `Node JS started on http://localhost:${port}` )
} );


我不确定我还遗漏了什么,任何投入都非常感谢。

谢谢。


共1个答案

匿名用户

您可以将包配置为在启动时运行nodemon server.js,然后在入口点中指定npm start:

DockerFile:

FROM node:12
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
ENV PATH="/usr/src/app:${PATH}"
ENTRYPOINT ["npm", "start"]

package.json:

{
  "name": "nodedocker",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon server.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1",
    "nodemon": "^2.0.4"
  }
}

测试:

$ docker container run -it --rm q63534772
> nodedocker@1.0.0 start /usr/src/app
> nodemon server.js

[nodemon] 2.0.4
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node server.js`
Node JS started on http://localhost:3000