Docker Compose多文件合并启动时LAPIS_ENV环境变量未识别问题
问题原因
environment块中配置的LAPIS_ENV是注入容器内部运行时的环境变量,而command字段中直接书写的${LAPIS_ENV}会在宿主机执行Compose配置解析的阶段完成变量替换,该阶段仅会读取执行docker compose命令的宿主机shell环境、同级目录.env文件中的变量,不会读取environment块定义的容器内变量,因此会提示变量未设置。该问题和多Compose文件的加载顺序无关,调换顺序不会改变变量替换的执行逻辑。
修复方法
将主配置文件中backend服务command字段里的${LAPIS_ENV}修改为$${LAPIS_ENV}即可。
Compose解析配置时会自动将$$转义为单个$,最终传入容器的启动命令为bash -c "/usr/local/bin/docker-entrypoint.sh ${LAPIS_ENV}",容器内执行该命令时,会自动读取environment块配置的LAPIS_ENV变量值,多文件合并的环境配置可以正常生效。
修改后的command配置片段:
command: bash -c "/usr/local/bin/docker-entrypoint.sh $${LAPIS_ENV}"
附原始相关配置
主配置 docker-compose.yml
version: '2.4' services: backend: mem_limit: 50mb memswap_limit: 50mb build: context: ./backend dockerfile: Dockerfile depends_on: - postgres volumes: - ./backend:/var/www - ./data:/var/data restart: unless-stopped command: bash -c "/usr/local/bin/docker-entrypoint.sh ${LAPIS_ENV}" postgres: build: context: ./postgres dockerfile: Dockerfile environment: PGDATA: /var/lib/postgresql/data/pgdata POSTGRES_HOST_AUTH_METHOD: trust volumes: - postgres:/var/lib/postgresql/data - ./postgres/pg_hba.conf:/var/lib/postgres/data/pg_hba.conf - ./data/backup:/pgbackup restart: unless-stopped volumes: postgres:
开发环境覆盖配置 docker-compose.dev.yml
version: '2.4' services: backend: environment: LAPIS_ENV: development ports: - 8080:80
启动脚本
#!/usr/bin/env bash docker compose -f docker-compose.yml -f docker-compose.dev.yml up
内容的提问来源于stack exchange,提问作者Karai17
相关产品推荐
相关产品推荐

