如何在不同容器之间共享乳胶(Docker 服务)

问题描述 投票:0回答:1

我想在 docker 容器中运行 Latex 并将其作为服务提供给其他容器。 然后我想通过 VS 代码容器扩展访问“服务”。应该是这样的,Latex Mircoservice。如果可能的话,我想使用 docker-compose。这种方法的优点是磁盘使用率较低,因为现在我正在为每个乳胶项目构建一个容器,其中包含完整的乳胶安装。每个容器使用大约 ~5GB。

我当前的 Dockerfile 创建了 my-latex 图像,然后应该被各种项目使用。

FROM texlive/texlive:latest

RUN apt-get update && \
    apt-get -y install build-essential && \
    cpan YAML::Tiny && \
    cpan File::HomeDir && \
    cpan Unicode::GCString

构建我运行的图像:

docker build -t my-latex .

然后在我的项目目录中创建一个 docker-compose.yml,如下所示:

services:
  latex:
    image: my-latex
    volumes:
      - ./latex:/workspace
    tty: true
    command: ["bash"]

在我的项目目录中运行

docker-compose up
。 但是,如果我想在容器中重新打开,我会得到一个错误,工作区不存在,如下所示。

我在 docker-compose.yml 中尝试了不同的方法,但我无法让它工作。

也许我错过了什么。但据我所知,这个问题应该可以用 docker 解决。

提前致谢

docker unix docker-compose service pdflatex
1个回答
0
投票

latex
不是长时间运行的命令。它会将 LaTeX 源文件编译为 TeX DVI 格式,然后退出。尝试将其作为长期运行的 Compose 服务运行是没有意义的。

对于此设置,我将使用

docker run
或类似的基于 API 的调用运行一次性容器

docker run \
  --rm \
  -v "$PWD/latex:/workspace" \
  -w /workspace \
  my-image \
  pdflatex my-document

您提到磁盘空间是一个问题。 Docker 容器通过其镜像之上的 写时复制 文件系统层工作。只要您不尝试覆盖任何 TeX 文件系统内容,每个容器都会与底层图像共享它。虽然像

docker ps
这样的诊断可能会明显显示一个大容器,但使用像
df
这样的工具进行检查不会显示更多的磁盘空间被使用。

© www.soinside.com 2019 - 2024. All rights reserved.