Python Django:我可以在自定义命令中使用带有docker compose的子进程吗?

Python Django:我可以在自定义命令中使用带有docker compose的子进程吗?,python,django,docker,docker-compose,django-commands,Python,Django,Docker,Docker Compose,Django Commands,我在django中创建了一个自定义命令,我想在其中使用docker compose命令。我使用的子流程如下所示: class Command(BaseCommand): def handle(self, *args, **options): data = open_file() os.environ['DATA'] = data command_name = ["docker-compose ", "-f", "dock

我在django中创建了一个自定义命令,我想在其中使用docker compose命令。我使用的子流程如下所示:

class Command(BaseCommand):

def handle(self, *args, **options):
    data = open_file()
    os.environ['DATA'] = data
    command_name = ["docker-compose ", "-f", "docker-compose.admin.yml", "up"]
    popen = subprocess.Popen(command_name, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                             universal_newlines=True)
    return popen
当我这样做时,我得到一个FileNotFoundError:

FileNotFoundError:[Errno 2]没有这样的文件或目录:“docker compose”:“docker compose”

甚至可以在命令内部使用docker compose吗? 感觉好像我错过了什么


谢谢大家!

我看到了两种可能的情况

  • docker compose应该在后台运行,因此,应该在命令末尾添加
    -d
    选项:
    docker compose-f docker-compose.admin.yml up-d

  • 最佳实践是在后台启动docker compose,您可以通过popen执行
    docker compose-f docker-compose.admin.yml日志获取输出

  • 您还可以运行docker compose服务并获得交互式输出,在yml文件中定义
    stdin\u open:true

  • 您可以检查当前目录是否存在docker-compose.admin.yml,打印
    os.getcwd()
    ,并将其与docker-compose.admin.yml路径进行比较

  • 可能需要
    shell=true
    ?docker compose
    后有一个额外的空格。(不要使用
    shell=True
    :很容易引入安全问题,使整个主机成为根目录。)