在makefile中导出当前用户ID以供docker-compose使用

16

我正在尝试将当前用户ID传递到 docker-compose.yml 中。

docker-compose.yml 中的写法如下:

version: '3.4'

services:
    app:
        build:
            context: ./
            target: "php-${APP_ENV}"
        user: "${CURRENT_UID}"

我写了一个 Makefile 替代 CURRENT_UID=$(id -u):$(id -g) docker-compose up -d

#!/usr/bin/make

SHELL = /bin/sh

up: 
    export CURRENT_UID=$(id -u):$(id -g)
    docker-compose up -d

当我运行make up时,CURRENT_UID仍然为空。

在Makefile中是否有可能导出uid?


1
“export”和您正在运行的命令需要在同一Makefile行上。出于同样的原因,Dockerfile中的“RUN”命令也是如此。 - David Maze
不工作 https://gist.github.com/matchish/ed0f03bc58d73eb2e94876a512d4205a - Serhii Shliakhov
1
$(VARIABLE) 是 Make 扩展语法。你需要使用 $$ 来插入美元符号,或者使用 GNU make 的 $(shell command ...) 扩展。 - David Maze
2
不要在配方内部使用 $(shell ...)。这是不必要的,只会造成混乱。 - MadScientist
显示剩余2条评论
3个回答

34

这是我的解决方案

#!/usr/bin/make

SHELL = /bin/sh

CURRENT_UID := $(shell id -u)
CURRENT_GID := $(shell id -g)

export CURRENT_UID
export CURRENT_GID

up: 

    docker-compose up -d

1
这个解决方案对我很有帮助。谢谢!我只是像这样更改了我的设置:docker run -u ${CURRENT_UID}:${CURRENT_UID} ... - ricoms
1
SHELL变量有什么作用?Bash脚本是区分大小写的,对吧? - goonerify
1
是的!已经找了一个多小时了!谢谢。可以直接在Makefile中工作,无需SHELL = /bin/sh部分。 - newms87
此回答 https://dev59.com/cHRB5IYBdhLWcg3wj32c#589300 解释了SHELL变量的作用。 - Nick Roz
1
@ricoms 你的评论中有一个拼写错误,应该是 ${CURRENT_UID}:${CURRENT_GID} - André Ricardo
显示剩余2条评论

4

另一种选择是使用env

Makefile:

SHELL=/bin/bash

UID := $(shell id -u)

up:
    env UID=${UID} docker-compose up -d

0

在编程中,你需要在 (id -u) 和 (id -g) 前面使用 2 个美元符号 ($$)。

#!/usr/bin/make

SHELL = /bin/sh

up: 
    export CURRENT_UID=$$(id -u):$$(id -g)
    docker-compose up -d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接