gpt4 book ai didi

docker - 在Makefile中导出环境变量时出现问题

转载 作者:行者123 更新时间:2023-12-02 21:06:30 24 4
gpt4 key购买 nike

我想在Makefile中导出环境变量。在这种情况下,是要获取用于通过docker调试的IP

生成文件

start:
export XDEBUG_REMOTE_HOST=$$(/sbin/ip route|awk '/kernel.*metric/ { print $$9 }') \
; docker-compose up -d

从答案更新:
version: '3.5'

services:
php:
build:
context: .
dockerfile: docker/php/Dockerfile
environment:
- XDEBUG_CONFIG="idekey=docker"
- XDEBUG_REMOTE_HOST=${XDEBUG_REMOTE_HOST}

输出:
$ make start
export XDEBUG_REMOTE_HOST=$(/sbin/ip route|awk '/kernel.*metric/ { print $9 }') \
; docker-compose up -d
Starting service_php ... done

$ docker-compose exec php bash
WARNING: The XDEBUG_REMOTE_HOST variable is not set. Defaulting to a blank string.

最佳答案

您需要确保变量分配和docker命令在同一 shell 中运行。琐碎地,将它们放在相同的规则中:

start:
XDEBUG_REMOTE_HOST=$$(/sbin/ip route|awk '/kernel.*metric/ { print $$9 }') \
docker-compose up -d

我拿出 @是因为这可能只是个坏主意,尤其是在您需要了解此处发生的情况时。如果您不想对 make -s进行正确的测试,则可以使用 Makefile
export的目的是将变量公开给子流程,但这在这里不是必需的。相反,我们使用shell的常规
variable=value anothervar=anothervalue command

语法,用于在单个命令的持续时间内设置变量的值。

如果 docker-compose的内部要求将变量进行 export ed,那么当然也可以这样做:
start:
export XDEBUG_REMOTE_HOST=$$(/sbin/ip route|awk '/kernel.*metric/ { print $$9 }') \
; docker-compose up -d

请注意,命令列表第一行末尾的反斜杠如何将两个命令合并到一个逻辑行上,因此它们被传递到同一shell实例,并且需要 ;命令分隔符来终止第一条命令。 (我把分号放在行的开头,以提醒读​​者这是所有命令行。)

特别是对于 docker-compose,从命令行设置变量的惯用方式是使用特定的命名选项;
start:
docker-compose up -e XDEBUG_REMOTE_HOST=$$(/sbin/ip route|awk '/kernel.*metric/ { print $$9 }') -d

还有其他解决方法,例如GNU Make Make .ONESHELL指令,但这很简单明了,并且可以移植到任何Make中。

关于docker - 在Makefile中导出环境变量时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57656226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com