使文件在不同的docker容器中通过文件路径相互访问

时间:2018-04-09 15:26:04

标签: python-3.x docker docker-compose libreoffice

我已经使用docker-compose来对一个python应用程序进行dockerise依赖于一个工作正常的数据库。 python应用程序生成一个powerpoint文件,它存储在容器中的/ tmp中。然后需要将其转换为pdf,以便对其进行渲染。我打算使用dockerised libreoffice图像https://hub.docker.com/r/domnulnopcea/libreoffice-headless/

来做到这一点

libreoffice容器运行如下

sudo docker run -v /YOUR_HOST_PATH/:/tmp libreoffice-headless libreoffice --headless --convert-to pdf /tmp/MY_PPT_FILE --outdir /tmp

YOUR_HOST_PATH在我的python app容器中

我需要做什么

我需要python应用程序调用libreoffice容器并转换驻留在python应用程序容器中的ppt文件,然后使转换后的文档的路径可用于呈现前端。

基本上如何使用docker-compose

使不同的docker容器中的文件彼此可访问

我的docker-compose.yaml:

version: '3'
services:
  backend:
    image: interrodata_backend
    build: ./backend
    ports:
      - "9090:9090"
    depends_on:
      - db
    environment:
      - DATABASE_HOST=db
  db:
    image: nielsen_db
    restart: always
    build: ./db

1 个答案:

答案 0 :(得分:1)

  

如何在另一个容器中调用命令?

this answer中,@ Horgix解释了调用驻留在另一个容器中的可执行文件的方法。对于您的情况,最干净的方法是使您的libreoffice容器成为服务,并向外部公开HTTP API。然后从Python应用程序容器中调用此API。

  

如何在不同容器之间共享文件?

您可以使用卷或绑定装置来实现此目的。

例如,要使用bind-mounts:

docker run -v /host/path:/tmp python-app
docker run -v /host/path:/tmp libreoffice-headless

Python应用程序生成文件到其自己的/tmp目录。 libreoffice应用程序将在其自己的/tmp目录中找到相同的文件。他们共享同一个目录。

使用卷的想法相同。您可以找到更多信息here