在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流中使用呢?




