我正在構建一個簡單的節點服務器以在 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" ]
uj5u.com熱心網友回復:
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) => { ... });
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/378408.html
