【问题标题】:Can't build Node container with volume with package.json file to run npm install无法使用带有 package.json 文件的卷构建 Node 容器来运行 npm install
【发布时间】:2019-12-02 00:16:32
【问题描述】:

Docker 如何构建容器?我想不通。我要:

  • 构建容器
  • 在其中传递本地文件夹
  • 在卷文件夹中的容器中安装 npm(使用 dockerfile)(这样,我可以在本地驱动器上看到它)
  • 在我的 yaml 配置文件中运行命令

我尝试使用ls 命令列出文件夹的内容,但/src/ 始终为空(打印:src) 我的docker-compose.yml

version: '3'

services:
  node:
    build:
      context: .
      dockerfile: Dockerfile.node
    volumes:
      - ./src:/src
    command: run develop
    tty: true

我的 Dockerfile.node:

FROM node:12
WORKDIR /src
COPY ./src/package*.json ./src/
RUN ls
RUN cd ./src
RUN ls
RUN npm install
RUN ls

在运行 npm install 命令时我收到了这个错误:

npm WARN saveError ENOENT: no such file or directory, open '/src/package.json'

我用命令docker-compose up --build启动项目

我的文件夹结构是:

/
src
  --package.json
docker-compose.yml
Dockerfile.node

请帮忙,提前谢谢。

【问题讨论】:

  • Docker 并没有真正按照您描述的方式工作。如果要在本地源码树上运行本地命令,直接运行node即可;它将有更少的陷阱和移动部件,它也能正常工作。通常,Dockerfile 中的步骤在源树的独立副本上运行,并且永远不会反映在主机上,并且Dockerfile 中的所有内容都发生在docker run 命令中的任何内容或大多数选项之前docker-compose.yml 文件生效——特别是构建序列永远不会看到已安装的卷。
  • 大卫迷宫 - 谢谢,好点子!在知道这一点之前,我已经受了很多苦。

标签: node.js docker npm


【解决方案1】:

cd ./src 仅在当前的RUN 命令中可用,因为 Dockerfile 每个命令都在单独的 shell 中运行,所以此时运行npm install 时,您的工作是 WORKDIR,即 /src 不是那个您期望使用cd .src,它应该是/src/src

RUN pwd
#/src
RUN cd ./src #here /src/src
RUN ls
#/src <-- back to WORKDIR, while you are expecting /src/src
RUN npm install

简而言之,dockerfile 中有WORKDIR 而不是cd

你必须选择,改变命令

RUN cd ./src && npm i

或更改复制命令,其余部分保持原样。

COPY ./src/package*.json .

【讨论】:

  • 这就是我需要的语法:cd ./src && npm i.非常感谢!
猜你喜欢
  • 2011-05-23
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 2021-03-26
  • 2013-07-30
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
相关资源
最近更新 更多