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

Docker Compose中$符号转义失效问题求助

Docker Compose中setup服务sed命令$符号丢失的问题及解决

问题根源

你当前的配置存在引号嵌套冲突:外层/bin/sh -c '...'用单引号包裹脚本内容,而内部sed命令的替换表达式又使用了单引号,这会导致shell解析时提前闭合外层单引号,使得sed的参数被错误截断,最终$符号无法正确传递到sed命令中。同时YAML的>折叠换行语法结合嵌套单引号后,进一步打乱了命令的解析逻辑。

可行解决方案

方案1:改用双引号包裹sed替换表达式

调整sed的引号类型,避免和外层单引号冲突,同时保留$$转义让Docker Compose解析为单个$:

services:
  setup: 
    image: image:tag
    container_name: setup
    user: "0"
    command: >
      /bin/sh -c '
        sed -i "s/before with a $$/after with a $$/" /foo/bar/something.txt;
      '

方案2:使用命令数组形式(推荐)

用数组定义command,避免shell解析的引号嵌套问题,YAML不会自动转义$,直接传递给sed:

services:
  setup: 
    image: image:tag
    container_name: setup
    user: "0"
    command:
      - /bin/sh
      - -c
      - |
        sed -i 's/before with a $/after with a $/' /foo/bar/something.txt

方案3:转义内部单引号

如果必须用单引号包裹sed替换表达式,可通过'\''转义内部单引号,确保shell正确解析:

services:
  setup: 
    image: image:tag
    container_name: setup
    user: "0"
    command: >
      /bin/sh -c '
        sed -i '\''s/before with a $$/after with a $$/'\'' /foo/bar/something.txt;
      '

内容的提问来源于stack exchange,提问作者Vincent LE ROUX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:55:25