You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用sops exec-file搭配docker-compose?执行启动命令时永久阻塞

解决sops exec-file搭配Docker Compose阻塞的问题

问题分析

你遇到的情况核心原因是:Docker Compose在后台启动(-d参数)时,会默认保持标准输入(stdin)的连接,而sops exec-file会把自身的stdin传递给子进程,导致sops一直等待输入,从而永久阻塞。Podman对stdin的处理逻辑不同,所以能正常运行。

解决办法

1. 强制断开Docker Compose的stdin

在docker compose命令后追加< /dev/null,切断stdin连接,让它不会等待输入:

sops exec-file file.env "docker compose --env-file {} up -d < /dev/null"

2. 用sops的--no-stdin参数(部分版本支持)

如果你的sops版本支持--no-stdin,可以直接禁止sops传递stdin给子进程:

sops exec-file --no-stdin file.env "docker compose --env-file {} up -d"

3. 先解密再启动(兜底方案)

如果上面两种方法都不生效,可以先把加密的env文件解密到临时文件,再用Docker Compose加载,最后清理临时文件:

sops -d file.env > temp.env && docker compose --env-file temp.env up -d && rm temp.env

⚠️ 注意:临时文件会存储明文环境变量,要确保操作环境安全,避免敏感信息泄露。

内容的提问来源于stack exchange,提问作者Ado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 05:12:10