[npm命令在运行docker容器时找不到错误

问题描述 投票:1回答:2

我正在尝试使用gitlab-runner图像进行一些操作,

    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命令?我要去哪里错了。

高山中还安装了哪个目录纱?

我知道这不是一个高效的docker文件,但是我在优化容器之前先尝试运行该容器。

node.js docker dockerfile apk alpine
2个回答
1
投票

要构建您的应用,您不应使用gitlab-runner图像,而应使用“节点”图像。

[Gilab-runner映像用于运行gitlab代理,该代理可以连接到docker引擎并生成将在其中执行构建的节点容器,在本例中为docker映像构建。

要使用gilab,您需要准备一个gitlab-ci文件,在其中定义执行构建所需的步骤和所需的“服务”。

Tl; dr:将基本映像更改为node:latest,并作为一个完全独立的工作设置gitlab运行程序。

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

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

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


0
投票

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

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中将yarn和命令分别分隔为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.

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

© www.soinside.com 2019 - 2024. All rights reserved.