npm ERR!缺少脚本:服务

时间:2019-12-14 07:52:31

标签: node.js docker

启动Docker容器时出错。我正在使用nodemon来监听文件更改。

DockerFile

FROM node:alpine
WORKDIR '/app'
COPY package.json .
RUN npm install
COPY . .
CMD ["npm","run","serve"]

Package.json

{
    "dependencies": {
        "express": "*",
        "nodemon": "*"
    },
    "scripts": {
        "serve": "nodemon index.js",
        "start": "node index.js"
    }
}

构建命令

docker build -f Dockerfile.dev -t test/nodeapp1 .

cmdLine docker cmd->

docker run -p 3000:8080 -v /app/node_modules -v pwd:/app test/nodeapp1.

我是docker的新手,无法找出原因。

3 个答案:

答案 0 :(得分:0)

在您的dockerfile中进行此更改

FROM node:alpine

ENV NPM_CONFIG_PREFIX=/home/node/.npm-global
ENV HOME=/home/node/app
ENV PATH="/home/node/.npm-global/bin:${PATH}"

USER node

RUN npm install -g nodemon


RUN mkdir -p ${HOME}
WORKDIR ${HOME}

ADD package.json ${HOME}

RUN cd ${HOME} && npm install

CMD [ "npm" ,"run", "serve" ]

构建Docker容器

docker build -f Dockerfile -t prac/nodeApp .

运行docker容器

docker run -p 3000:8080 -v /app/node_modules -v pwd:/app prac/nodeApp

答案 1 :(得分:0)

将WORKDIR更改为新值是可行的。

FROM node:alpine

WORKDIR '/dir'

COPY package.json .

RUN npm install

COPY . .

CMD [ "npm" ,"run", "serve" ]

答案 2 :(得分:0)

您的docker run -v选项错误。您可能实际上是想写

docker run ... -v $PWD:/app ...
docker run ... -v $(pwd):/app ...

将当前目录(分别来自PWD环境变量或来自pwd命令)用作bind mount

我倾向于不推荐这种模式,特别是对于那些主机依赖性最小并且您与其他容器之间没有太多交互的Node应用程序。仅在本地安装Node(如果您尚未安装)并针对它进行实时开发可能会更容易;当您想使用Docker部署应用程序时,请使用COPY到映像中的版本,并且不要单独使用-v选项将代码注入到映像中。