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

Posted

技术标签:

【中文标题】如何在 docker 容器中下载 golang 和 node【英文标题】:How to download golang and node in docker container 【发布时间】:2022-01-14 14:48:02 【问题描述】:

我正在构建一个简单的节点服务器以在 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" ]

【问题讨论】:

与在任何其他系统中安装它们的方式相同。 【参考方案1】:

Go 是一种编译语言,通常不需要 Go 工具链来运行 Go 程序。

我会为此使用多阶段构建。第一阶段是FROM golang 拥有工具链并构建二进制文件;第二张COPY --from 将第一张图片放到通常位于搜索路径上的目录中。

FROM golang:1.17 AS downloader
WORKDIR /app                       # not under /go
COPY component-review-handler/ ./  # (double-check this COPY syntax)
RUN go build -o downloader ./cmd/downloader

FROM node:14
# vvv add this line
COPY --from=downloader /app/downloader /usr/local/bin/

# same as before
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
ENV NODE_TLS_REJECT_UNAUTHORIZED='0'
EXPOSE 3000
CMD ["node", "server.js"]

由于二进制文件现在位于 /usr/local/bin 中,这是默认的 $PATH 目录,因此您可以在您的代码中运行它,无需 cdgo run 部分

const  execFile  = require('child_process');
execFile('downloader',
         (error, stdout, stderr) =>  ... );

【讨论】:

这看起来像它的工作!非常感谢!你知道我如何向 go 命令添加参数吗?例如,如果我的脚本看起来像这样,请运行 /root/component-review-handler/downloader/main.go -build 1621568 -outdir /usr execFile() 接受一组附加参数; execFile('downloader', ['-build', '1621568', '-outdir', '/usr'], callback); 非常感谢!

以上是关于如何在 docker 容器中下载 golang 和 node的主要内容,如果未能解决你的问题,请参考以下文章

Golang项目部署3,容器部署

无法从 golang 连接到 docker postgres 容器

基于docker容器环境下的php/swoole/golang 性能小测试

docker(alpine+golang) 中 hosts 不生效问题解决大全

docker(alpine+golang) 中 hosts 不生效问题解决大全

我的docker随笔33:在容器中连接oracle数据库