如何在 docker 容器中下载 golang 和 node

我正在构建一个简单的节点服务器以在 docker 中运行。我介绍了一个小的 golang 模块,可以通过运行来执行


go run /root/component-review-handler/downloader/main.go -build 1621568 -outdir /usr

我目前通过在启动时运行以下脚本在我的节点服务器中本地运行它


exec(

    `cd ${process.env.ROOT_PATH}/component-review-handler && go run cmd/downloader/main.go`,

    (error, stdout, stderr) => {

      if (error) {

        logger.error(`error: ${error.message}`)

        return

      }

      if (stderr) {

        logger.log(`stderr: ${stderr}`)

        return

      }

      logger.log(`stdout: ${stdout}`)

    }

  )

但是当我在docker中运行代码时,出现以下错误


error: Command failed: cd /usr/src/app/component-review-handler && go run cmd/downloader/main.go


/bin/sh: 1: go: not found

有谁知道如何在我的 docker 容器中安装 node 和 golang?当前的 Dockerfile


FROM node:14


WORKDIR /usr/src/app


COPY package*.json ./


RUN npm install


COPY . .


ENV NODE_TLS_REJECT_UNAUTHORIZED='0'


EXPOSE 3000


CMD ["node", "server.js" ]


aluckdog
浏览 87回答 1
1回答

回首忆惘然

Go 是一种编译语言,通常不需要 Go 工具链来运行 Go 程序。我会为此使用多阶段构建。第一阶段是FROM golang拥有工具链并构建二进制文件;第二个COPY --from将第一个图像放入通常位于搜索路径上的目录中。FROM golang:1.17 AS downloaderWORKDIR /app                       # not under /goCOPY component-review-handler/ ./  # (double-check this COPY syntax)RUN go build -o downloader ./cmd/downloaderFROM node:14# vvv add this lineCOPY --from=downloader /app/downloader /usr/local/bin/# same as beforeWORKDIR /usr/src/appCOPY package*.json ./RUN npm installCOPY . .ENV NODE_TLS_REJECT_UNAUTHORIZED='0'EXPOSE 3000CMD ["node", "server.js"]由于二进制文件现在位于/usr/local/bin默认$PATH目录中,因此您可以在您的代码中运行它,而无需使用cdorgo run部分const { execFile } = require('child_process');execFile('downloader',         (error, stdout, stderr) => { ... });
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go