簡體   English   中英

如何從節點應用程序在 docker 中執行命令?

[英]How can I execute a command inside a docker from a node app?

我有一個正在運行的節點應用程序,我需要訪問位於高山 docker 圖像中的命令。 我必須在 javascript 中使用 exec 嗎? 如何在高山容器上安裝 latex 並從節點應用程序使用它?

我拉了一個高山 docker 圖像,啟動它並安裝了latex

現在我的主機上運行了一個 docker 容器。 我想從我的節點應用程序內部訪問這個 latex 編譯器(dockerized 與否)並且能夠將 *.tex 文件編譯成 *.pdf

如果我進入 alpine 圖像,我可以將 '.tex 編譯成 *.pdf 就好了,但是我如何從容器外部訪問這個軟件,例如節點應用程序?

如果您只想在本地容器文件系統中的文件上運行 LaTeX 引擎,您應該將其直接安裝在您的映像中並作為普通子進程運行。

例如,此 Javascript 代碼將在本地安裝了 LaTeX、Docker 或其他環境的任何環境中運行:

const { execFileSync } = require('node:child_process');
const { mkdtemp, open } = require('node:fs/promises');

const tmpdir = await mkdtemp('/tmp/latex-');
let input;
try {
  input = await open(tmpdir + '/input.tex', 'w');
  await input.write('\\begin{document}\n...\n\\end{document}\n');
} finally {
  input?.close();
}

execFileSync('pdflatex', ['input'], { cwd: tmpdir, stdio: 'inherit' });
// produces tmpdir + '/input.pdf'

在 Docker 上下文中,您必須確保 LaTeX 安裝在與您的 Node 應用程序相同的映像中。 你提到使用基於 Alpine 的 LaTeX 設置,所以你可以

FROM node:lts-alpine
RUN apk add texlive-full # or maybe a smaller subset
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY ./ ./
CMD ["node", "main.js"]

您不應嘗試直接在其他 Docker 容器中運行命令。 這有幾個方面很棘手,包括安全問題和管理輸入和 output 文件。 如果可以在新的或現有的容器中直接調用命令,那么使用該權限來破壞整個主機也是非常簡單的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM