如何在执行Makefile的target时自动加载所有export变量?
解决Makefile变量让docker-compose读取的方法
全局export变量,确保子进程继承
把需要的变量在Makefile的target之前用export声明,这样执行make start时,docker-compose作为make的子进程会自动继承这些环境变量:export DB_HOST=localhost export DB_PORT=5432 start: docker-compose up -d如果变量是target内动态生成的,要在定义后立刻export再执行docker-compose:
start: export DB_HOST=$(shell hostname) && export DB_PORT=5432 && docker-compose up -d用.env文件中转(最稳妥的方案)
docker-compose默认会读取当前目录的.env文件,所以可以在Makefile里把变量写入这个文件,再启动服务:start: @echo "DB_HOST=localhost" > .env @echo "DB_PORT=5432" >> .env docker-compose up -d clean-env: rm -f .env加
@是为了不让命令本身打印到终端,避免冗余输出。检查docker-compose的变量引用格式
确认docker-compose.yml里是用${变量名}的格式引用,别写错符号:services: db: image: postgres:14 environment: POSTGRES_HOST: ${DB_HOST} POSTGRES_PORT: ${DB_PORT}直接给docker-compose传变量
不想写文件的话,可以用进程替换直接传递变量集给docker-compose:start: docker-compose --env-file <(export DB_HOST=localhost && export DB_PORT=5432 && env | grep DB_) up -d这种方式适合临时生成的变量,不用留文件残留。
内容的提问来源于stack exchange,提问作者iamphduc
相关产品推荐
相关产品推荐

