跳到内容

🐳 .env → docker-compose 环境变量

粘贴 .env 文件内容,即可转换为 docker-compose.yml 的 environment 块。支持列表与字典两种格式。

完全免费 无需注册 浏览器内完成 5 种语言 深色模式
🔒 隐私保障: .env 内容(包括 API 密钥与密码)不会上传。所有转换均在浏览器内完成。

🔗 相关工具

📖 常见的坑

.env 格式的文本转换为 docker-compose.ymlenvironment 块(列表形式或字典形式),并支持对疑似机密键的警告以及替换为 ${VAR} 引用。处理全部在浏览器内完成。本工具真正的主题不是格式转换,而是转换结果放在哪里——docker-compose.yml 是会进 Git 的文件,把值原样抄进去的那一刻,它就不再是秘密了

情形 会发生什么 怎么处理
把 API 密钥直接写进 docker-compose.yml docker-compose.yml几乎必定会被提交进仓库的文件。把真实密钥写进去的那一刻,整个团队、CI、fork 过的人、以及任何克隆过该仓库的人,都能读到它。更严重的是,它会永久留在 Git 历史中:事后 git rm 也无法从过去的提交里抹掉如果是公开仓库,推送后几分钟内就会被自动扫描发现——「我马上就删了」并不构成辩护。 请打开本页的「转换为 ${VAR} 引用」——写成 DB_PASSWORD=${DB_PASSWORD}compose 就会从同目录的 .env 中读取真实值(把 .env 加进 .gitignore)。更进一步,写 env_file: .env 连键名清单都不必出现在 compose 文件里。如果已经提交了,改写历史并不能解决问题——值仍会留在 fork、缓存、CI 日志以及他人的本地克隆中。唯一正确的应对是吊销该密钥并签发新的,并且在发现的当下就去做。
值的引号与转义不按预期工作 .env 与 YAML 的引号规则并不相同.envFOO="bar baz" 的引号源自 shell 记法,某些版本的 Docker Compose 会把它当作字面量,于是值里真的带上了 " 字符。反过来在 YAML 一侧,值中含有 :#{ 时必须加引号——URL: http://x:8080 会因为冒号而出错。还有一点:.env 无法表示含换行的值——想放私钥或证书时,必然卡在这里。 只要值中含有空格、:#{,在 YAML 一侧就务必加引号。本工具会自动判断,但手工编辑之后,请执行 docker compose config 查看被解释后的结果。该命令会输出已完成变量展开的最终形态,是否符合预期一眼便知。含换行的值,惯例是先转成 Base64 再以单行传递(由应用侧解码)——或者更好的做法是,干脆不用环境变量,而通过 Docker secret 或卷挂载以文件形式传入。证书与密钥本就不该塞进环境变量。
变量没有展开,或者进来的是旧值 .env 内部的相互引用不会被展开。上一行写 HOST=example.com,下一行写 URL=http://$HOST/apiURL 的值就是字面上的 http://$HOST/api——compose 只在 compose 文件内部展开 ${VAR},而 .env 只是被当作扁平的键值清单来读。至于「进来的是旧值」,根源在优先级:同一变量出现在多处时,environment: 强于 env_file:env_file: 强于 .env——所以你改了 .env,但 environment: 里还留着旧值的话,赢的是旧值 先执行 docker compose config——它会输出完全解析后的最终配置,你就能确切看到究竟采用了哪个值。不看这份输出,光在 .env 和 compose 文件之间来回改,必然浪费时间。如果需要拼装值(例如用 $HOST 构造 $URL),请放到容器的 entrypoint 脚本里做——那里是普通的 shell,可以正常展开。若要把字面量 $ 作为值的一部分传入,请写成 $$——不知道这一点时,密码里含 $ 就成了一个无从解释的故障。

不要把 .env 放进仓库。应当改为提交 .env.example,只列出键名、值留空——新加入的人能看清要配置什么,值本身也不会外泄。请把 .env 写进 .gitignore同时别忘了 !.env.example 这条例外。其次:环境变量在容器内部可以通过 docker inspect/proc/1/environ 读到——也就是说,凡是能进入该容器的人都能看到全部。生产环境中真正要紧的机密,理想形态不是环境变量,而是 Docker Swarm 的 secret 或 Kubernetes 的 Secret(并由外部 Vault 支撑),以文件方式挂载请把环境变量理解为「把机密与代码分离」的机制,而不是「保护机密安全」的机制——这是两回事。

📖 使用方法

  1. 1
    粘贴 .env
    将 .env 内容粘贴到左侧输入框。以 # 开头的行视为注释。
  2. 2
    选择输出格式
    选择列表或字典格式,可选将密钥重写为 ${VAR} 引用。
  3. 3
    复制结果
    右侧显示转换结果。复制后粘贴到 docker-compose.yml 的 environment 键下即可。

❓ 常见问题

哪些键会触发密钥警告?
键名包含 PASSWORD、SECRET、KEY、TOKEN、API_KEY 或 PRIVATE 时触发警告。
引号和转义如何处理?
单/双引号包裹的值会去除引号;若值含 YAML 特殊字符(: # 等),输出时会自动加引号。
支持 $OTHER 变量展开吗?
值按原样输出。docker-compose 自身在运行时解析 ${VAR},此处不进行文本展开。
🐛 此工具出现问题了吗?

免费、无需注册。仅提供复现步骤也有帮助。报告将直接发送给运营者并用于改进。

※ 为复现问题,浏览器信息 (UA / 屏幕 / 语言 / URL) 将自动发送