python - 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 吗?感觉就像我错过了什么。
谢谢 !
解决方案
我看到两件可能的事情。
您的 docker compose 应该在后台运行,因此,您应该
-d
在命令末尾添加选项:docker-compose -f docker-compose.admin.yml up -d
最佳实践是在后台启动 docker compose,您可以使用 popen 执行输出
docker-compose -f docker-compose.admin.yml logs
您还可以运行 docker-compose 服务并获得交互式输出,stdin_open: true
在您的 yml 文件中进行定义。
- 您可以检查当前目录是否存在 docker-compose.admin.yml,打印
os.getcwd()
并将其与 docker-compose.admin.yml 路径进行比较。
推荐阅读
- keras - Keras 不断预测默认值
- intellij-idea - 如何将外部应用程序集成到 IntelliJ 插件中?
- python - 使用继承在不同类之间共享数据
- java - 构建 Minecraft Forge 1.17.1 MDK 时出现“Content-Length delimited message body”错误
- r - 返回新数据框,其中包含在 R 中使用用户给定名称的函数内创建的列
- html - 如何在角度表行中仅显示和维护一次数据状态
- macos - Visual Studio Code 中的 Flutter SDK 路径问题
- node.js - 我试图通过 npm install -g json-server 来 json-server,但每次我得到一个错误
- apache - 将查询参数转发到 .htaccess 文件中的 ErrorDocument
- python - 无法确定关系 Product.collections 上的父/子表之间的连接条件