首页 > 解决方案 > Django:我可以在自定义命令中使用带有 docker-compose 的子进程吗?

问题描述

我在 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 吗?感觉就像我错过了什么。

谢谢 !

标签: pythondjangodockerdocker-composedjango-commands

解决方案


我看到两件可能的事情。

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

  2. 最佳实践是在后台启动 docker compose,您可以使用 popen 执行输出docker-compose -f docker-compose.admin.yml logs

您还可以运行 docker-compose 服务并获得交互式输出,stdin_open: true在您的 yml 文件中进行定义。

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

推荐阅读