使用docker-compose up和docker-compose run在容器内执行容器中的命令

时间:2018-05-02 12:29:51

标签: python docker subprocess docker-compose dockerfile

我会尽可能简单地解释一下。

我有一个dockerised python应用程序。在这个python应用程序中,我尝试在另一个(libreoffice)容器中运行docker命令:

import subprocess
file_path = 'path_to_file'
args = ['docker', 'run', '-it', '-v', '/tmp:/tmp',
'lcrea/libreoffice-headless', '--headless', '--convert-to', 'pdf', file_path,
'--outdir', '/tmp'] 

process = subprocess.run(args,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        timeout=timeout)

我用一个启动服务器的命令结束我的python应用程序的Dockerfile:

CMD python3 -m app.run_app

有趣的是,当我像这样启动python应用程序时,它工作正常:

docker-compose run -p 9090:9090 backend /bin/bash
root@74430c3f1f0c:/src python3 -m app.run_app

但是当我使用docker-compose up启动它时,永远不会调用libreoffice容器。我很确定,因为当我在第一个实例中docker ps -a创建一个libreoffice容器时,在第二个实例中没有。

这里发生了什么?

1 个答案:

答案 0 :(得分:0)

我发现了错误。由于-it,我传递了the input device is not a TTY选项,导致流程失败。我所要做的就是把它拿出来......