我已经使用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
答案 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。