You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在Docker容器中运行Apache Hop流时,环境变量无法传入流中的问题排查求助

在Docker容器中运行Apache Hop流时,环境变量无法传入流中的问题排查求助

大家好,我最近在用Docker和Docker Compose部署Apache Hop作业时,碰到了环境变量传递失效的问题,折腾了好一阵没找到根源,想请教下各位帮忙排查下。

先给大家贴一下我的相关配置文件:

1. Dockerfile

FROM apache/hop:latest
# Set working directory
WORKDIR /files
# Copy the hop folder and .env file into the container
COPY hop /files/hop
COPY .env /files/.env
# Export environment variables from .env file
# Note: Docker does not automatically parse .env during build,
# so this is just for reference. Use docker-compose or --env-file at runtime.
# Set required environment variables for Hop
ENV HOP_LOG_LEVEL=Basic
# Run the pipeline
CMD ["hop-run"]

2. docker-compose.yml

services:
  hop:
    image: apache/hop:latest
    container_name: hop-runner
    env_file:
      - .env
    environment:
      HOP_PROJECT_FOLDER: /files/hop
      HOP_PROJECT_NAME: write-to-log
      HOP_RUN_CONFIG: local
      HOP_METADATA_FOLDER: /files/hop/projects/write-to-log/metadata
      HOP_ENVIRONMENT_NAME: dev_docker
      HOP_ENVIRONMENT_CONFIG_FILE_NAME_PATHS: /files/hop/projects/write-to-log/metadata/environment/dev_docker.json
      HOP_FILE_PATH: projects/write-to-log/write-to-log.hwf
    volumes:
      - ./hop:/files/hop
    #command: sh -c "hop-conf --set=hop_env_Variaabel1=$env_Variaabel1 && hop-run"
    command: |
      sh -c "env | grep env_Variaabel1 && hop-conf --set=hop_env_Variaabel1=$env_Variaabel1 && hop-run"

3. .env文件内容

env_Variaabel1=VALUEXXX

4. dev_docker.json环境配置文件

{
  "variables" : [
    {
      "name" : "Variaabel1",
      "value" : "${hop_env_Variaabel1}",
      "description" : ""
    },
    {
      "name" : "Variaabel2",
      "value" : "${Variaabel3}",
      "description" : "${Variaabel2}"
    },
    {
      "name" : "Variaabel3",
      "value" : "blah",
      "description" : "${Variaabel2}"
    }
  ]
}

运行现象

我执行docker-compose up --build启动容器后,Hop作业能正常执行,但变量替换出现了问题:

hop-runner | 2025/09/19 13:48:06 - - --
hop-runner | 2025/09/19 13:48:06 - - Variaabel1="${hop_env_Variaabel1}"
hop-runner | 2025/09/19 13:48:06 - - Variaabel2="blah"
hop-runner | 2025/09/19 13:48:06 - - Variaabel3="blah"
hop-runner | 2025/09/19 13:48:06 - - --

可以看到Variaabel2和Variaabel3都能从dev_docker.json里正确解析值,但Variaabel1直接输出了${hop_env_Variaabel1}这个字面量,没有替换成我在.env里设置的VALUEXXX

我的预期逻辑

我本来以为整个流程是这样的:

  • .env里的env_Variaabel1会被Docker Compose加载成容器的环境变量
  • 通过docker-compose里的hop-conf --set=hop_env_Variaabel1=$env_Variaabel1,把容器环境变量env_Variaabel1的值赋值给Hop的hop_env_Variaabel1变量
  • 最后dev_docker.json里的Variaabel1引用${hop_env_Variaabel1},就能拿到对应的值

但实际没生效,想请问各位,问题到底出在哪里?怎么才能让容器的环境变量正常传入Hop流中使用呢?

火山引擎 最新活动