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

如何在docker-compose.yml中传递多行无键名环境变量

问题根因

你出现报错的核心原因是混淆了Docker命令的参数位置:

  • 原docker run命令中,单引号包裹的多行Logstash配置是跟在镜像名之后的容器进程启动参数,其中的-e是Logstash程序自身接收的「直接传入配置字符串」的命令行参数,根本不是Docker的-e/--env环境变量参数
  • Docker命令的参数顺序规则是:docker run [Docker自身参数] 镜像名 [传给容器内主进程的参数],镜像名之后的所有内容都不会被Docker识别为自身参数
    你错误地将这段配置放在了environment块下,而Compose的environment块要求每一项必须符合变量名=变量值的格式,解析时会把第一个空格前的内容识别为变量名,自然触发「变量名不能包含空白字符」的报错。
正确docker-compose.yml配置
version: '3'
services:
  logstash-producer:
    image: opensearchproject/logstash-oss-with-opensearch-output-plugin:7.16.2
    container_name: logstash-producer
    stdin_open: true # 对应原命令-it参数中的-i:保持标准输入打开
    tty: true # 对应原命令-it参数中的-t:分配伪终端
    networks:
      - test # 对应原命令的--net test参数
    command: >
      -e 'input { stdin { } } output {
        opensearch {
          hosts => ["https://opensearch:9200"]
          index => "opensearch-logstash-docker-%{+YYYY.MM.dd}"
          user => "admin"
          password => "admin"
          ssl => true
          ssl_certificate_verification => false
        }
      }'

networks:
  test:
    external: true # 标记test网络为预先创建的外部网络,和原命令行为一致
补充说明
  • 原命令的--rm(容器退出后自动删除)参数无法直接在Compose服务配置中声明,启动时使用docker-compose run --rm logstash-producer命令即可实现相同效果
  • 配置中使用YAML的>折叠语法处理多行内容,会自动将换行转为空格,避免Logstash配置解析错误
  • 如果你后续需要修改Logstash配置,直接修改command下的配置块即可,不需要调整其他配置项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:24:21