如何在 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
目录,因此您可以在您的代码中运行它,无需 cd
或 go run
部分
const execFile = require('child_process');
execFile('downloader',
(error, stdout, stderr) => ... );
【讨论】:
这看起来像它的工作!非常感谢!你知道我如何向 go 命令添加参数吗?例如,如果我的脚本看起来像这样,请运行 /root/component-review-handler/downloader/main.go -build 1621568 -outdir /usrexecFile()
接受一组附加参数; execFile('downloader', ['-build', '1621568', '-outdir', '/usr'], callback);
非常感谢!以上是关于如何在 docker 容器中下载 golang 和 node的主要内容,如果未能解决你的问题,请参考以下文章
无法从 golang 连接到 docker postgres 容器
基于docker容器环境下的php/swoole/golang 性能小测试
docker(alpine+golang) 中 hosts 不生效问题解决大全