【问题标题】:npm can't find package.json when running docker container with compose使用 compose 运行 docker 容器时,npm 找不到 package.json
【发布时间】:2019-08-30 12:32:59
【问题描述】:

我正在尝试将我的 Angular 7 客户端应用程序连接到本地的 docker compose。

当我 docker-compose up 时出现以下错误:

client-app    | npm ERR! errno -2
client-app    | npm ERR! syscall open
client-app    | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'

Dockerfile:

FROM node:9.6.1

RUN mkdir -p /app
WORKDIR /app
EXPOSE 4200

ENV PATH /app/node_modules/.bin:$PATH

COPY . /app

RUN npm install --silent
RUN npm rebuild node-sass

CMD ["npm", "run", "docker-start"]

客户端的组成部分是:

  client-app:
    image: ${DOCKER_REGISTRY-}client
    container_name: client-app
    ports:
      - "4200:81"
    build:
      context: .
      dockerfile: ClientApp/Dockerfile

package.json 位于 Dockerfile 旁边的 ClientApp 文件夹中,我假设 COPY 。 /app 应该将 package.json 复制到容器中。我在 dockerignore 中没有任何排除项。我正在将 Docker for Windows 与 Unix 容器一起使用。我之前尝试过 npm init (但无论如何都会创建一个空的 package.json )并查看了 SO 帖子,但大多数 dockerfile 定义看起来完全相同。我还尝试过:另外复制 package*.json ./ 并使用 --no-cache 构建图像。

【问题讨论】:

    标签: docker npm docker-compose


    【解决方案1】:

    您的 Dockerfile 没问题,COPY package*.json ./ 不是必需的 - 它与您的整个应用程序一起复制。

    问题出在您的 docker-compose 文件中。

    你定义了:

    build:
          context: .
          dockerfile: ClientApp/Dockerfile
    

    这意味着,您的 Dockerfile 将接受 docker-compose 上下文,即上面的 1 个目录:

    ├── docker-compose.yml -- this is the actual context
    └── ClientApp
        ├── Dockerfile -- this is the expected context
    

    所以当CMD运行时,它在package.json之上1个目录,因此无法运行命令,容器退出。

    要修复它,请为您的 docker-compose 文件提供正确的上下文:

    build:
          context: ClientApp
          dockerfile: Dockerfile
    

    它应该可以工作。

    【讨论】:

    • 感谢 Efrat @Kirill Ermolov,这解决了这个问题,我更喜欢使用 docker compose 的方法,因为我有时想单独运行客户端进行 CI 单元测试,并留下一个工作的 dockerfile 似乎是一个更好的选择.
    【解决方案2】:

    此命令COPY package*.json ./ 将尝试从根目录复制package.json。但是看起来您需要从 ClientApp 目录复制 package.json

    解决此问题的两种方法: 1)更改撰写文件context: ./ClientApp/ 2) 更改docker文件COPY ./ClientApp/package.json /app/package.json

    我认为更改 docker 文件更好,因为在功能中您可能希望从根目录复制一些文件

    【讨论】:

      猜你喜欢
      • 2020-04-25
      • 1970-01-01
      • 2021-02-18
      • 2018-02-04
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 2018-08-04
      • 2021-12-01
      相关资源
      最近更新 更多