运行 docker 容器时未发现 npm 命令错误

npm command not found error while running docker container

我正在尝试使用 gitlab-运行ner 图像,

    FROM gitlab/gitlab-runner:alpine
    WORKDIR /app
    COPY . /app
    RUN apk add yarn && yarn install

    RUN yarn --version        # this layer prints 1.16.0

    RUN ng build --prod
    EXPOSE 3000
    CMD ["yarn", "run", "start"]

以上是我创建的docker文件

    docker build -t runner:1 .

我能够成功构建图像

    docker run -p 3000:3000 runner:1

但是当我尝试 运行 容器时,它给我以下错误

`*FATAL: Command yarn not found.*`

不确定该行为,如果它能够在基础映像中安装 yarn (apk add yarn) 并使用 yarn install 安装依赖项,那么它是如何找不到 yarn 命令的运行宁容器?我哪里错了。

另外yarn安装在alpine的哪个目录下?

我知道它不是一个有效的 docker 文件,但我试图在优化它之前先 运行 容器。

要构建您的应用程序,您不应使用 gitlab-runner 图像,而应使用 'node' 图像。

Gilab-runner 图像用于 运行 一个 gitlab 代理,它可以连接到 docker 引擎并生成您将在其中执行构建的节点容器,在您的情况下是 docker 图像构建。

要使用 gilab,您需要准备一个 gitlab-ci 文件,您将在其中定义构建所需的步骤和步骤 'services'。

Tl;dr:将基本图像更改为 node:latest 并作为一个完全独立的工作设置 gitlab runner。

但是,如果您的目标是让您的应用程序扩展 gitlab runner,请尝试 docker 多阶段构建。

首先,使用 node:latest 图像构建您的应用程序,然后将构建输出复制到 gitlab-runner。

gitlab-runner 等运行时映像已从 yarn 或 npm 等构建工具中剥离,这就是您的映像失败的原因。主要目标是使运行时图像尽可能小,并且不需要 sdk,在生产级工作中有时会很危险。

输出版本。这意味着纱线已经安装好了。您可以找到与找到版本相同的路径。

RUN which yarn

Step 6/10 : RUN which yarn
 ---> Running in 0f633b81f2ed
/usr/bin/yarn

我们可以看到 /usr/bin/ 已添加到 PATH

 Step 7/11 : RUN echo $PATH
 ---> Running in fc3f40b6bfd9
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

但我不明白为什么不从 PATH 中读取纱线。

所以,我们已经在 Dockerfile 中明确设置了 PATH。

ENV PATH=${PATH} 

但是,问题仍然存在。现在我们必须在 Dockerfile 中将纱线和命令分别分隔为 ENTRYPOINTCMD

ENTRYPOINT ["yarn"]
CMD ["run", "start"]

已更新 Dockerfile

FROM gitlab/gitlab-runner:alpine

ENV PATH=${PATH}

WORKDIR /app
COPY . /app
RUN apk add yarn && yarn install

RUN yarn --version        # this layer prints 1.16.0
RUN ng build --prod

EXPOSE 3000
ENTRYPOINT ["yarn"]
CMD ["run", "start"]
---

$ docker run -p 3000:3000 harik8/yarn:latest 
yarn run v1.16.0
error Couldn't find a package.json file in "/app"
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

基本图像的行为看起来不正常。最好通过它。