无法在 docker 容器中全局正确安装 npm 包

Posted

技术标签:

【中文标题】无法在 docker 容器中全局正确安装 npm 包【英文标题】:Can't properly install npm package globally in docker container 【发布时间】:2021-07-08 20:18:49 【问题描述】:

我有一个 vue 项目。我不想将我的环境保留在我的主机上,我更喜欢与 docker 打交道。那么,为什么以这种方式处理节点是如此愚蠢而乏味且难以处理?所以我用节点创建了 Dockerfile,docker-compose.yml 并通过 hepler node:alpine 容器预安装了一个 vue-cli 项目。然后我要让工作作曲。但它不工作!因为我的全局 npm 包只是没有找到。谷歌中没有任何东西可以帮助我。

docker-compose.yml

version: '3'
services:
  app:
    build: .
    container_name: app
    ports:
      - "8080:8080"
    volumes:
      - "./:/app"

Dockerfile

FROM node:alpine

RUN npm install -g @vue/cli @vue/cli-service-global

WORKDIR /app/app

ENTRYPOINT ["vue-cli-service", "serve"]

(/app里面还有一个app没关系)

还有错误:

[bxp@manjaro vue]$ docker-compose up -d
Removing app
Recreating 801627fa0179_app ... error

ERROR: for 801627fa0179_app  Cannot start service app: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "vue-cli-service": executable file not found in $PATH: unknown

ERROR: for app  Cannot start service app: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "vue-cli-service": executable file not found in $PATH: unknown
ERROR: Encountered errors while bringing up the project.

【问题讨论】:

【参考方案1】:

documentation 似乎表明二进制文件未安装到您的典型位置之一(名义上为/usr/local/bin)。快速解决方法是将安装位置添加到您的 PATH 变量中。

FROM node:alpine
  
RUN npm install -g @vue/cli @vue/cli-service-global

WORKDIR /app/app

ENV PATH="$PATH:/usr/local/lib/node_modules/@vue/cli-service-global/node_modules/.bin"

ENTRYPOINT ["vue-cli-service", "serve"]

【讨论】:

以上是关于无法在 docker 容器中全局正确安装 npm 包的主要内容,如果未能解决你的问题,请参考以下文章

NPM 安装在 docker 容器中失败 - npm WARN tar ENOENT:没有这样的文件或目录

Docker 容器中的 Npm run serve

npm--安装taro遇到的问题

npm--安装taro遇到的问题

npm:后安装未在 docker 中运行

sh 将最新版本的Node.js和npm安装到Docker Ubuntu容器中,无论是否需要root访问权限。轻松更新两个appl