Dockerfile中ARG变量UID无法展开为键值对问题求助
Dockerfile中ARG变量无法在--mount的uid参数中展开的原因及解决方法
问题原因
--mount的配置参数由Docker构建引擎直接处理,不属于Shell执行上下文,因此无法像RUN命令内的Shell指令那样展开ARG或环境变量。- 切换到
USER airflow后,之前定义的ARG UID变量不会自动保留在当前用户的Shell环境中,即便通过ENV导出,也无法被--mount的参数解析。
解决方法
方法一:直接使用用户名代替UID
由于你已经通过ARG UID创建了airflow用户,该用户的UID正好是你指定的数值,因此可以直接将uid=$UID替换为uid=airflow,Docker会自动解析出该用户对应的UID:
USER airflow RUN --mount=type=cache,target=/home/airflow/.cache/pip \ --mount=type=secret,id=nexus3,target=/etc/nexus3.crt,uid=airflow,required=true
另外注意:当前用户是airflow,其家目录为/home/airflow,所以缓存目录应该改为/home/airflow/.cache/pip,避免因权限问题无法写入/root目录。
方法二:构建时直接指定UID数值(可选)
如果必须使用数值形式的UID,可以在构建命令中直接传递:
docker build --build-arg UID=10001 ...
但此方法仍无法直接在--mount中引用$UID,因此还是推荐方法一。
内容的提问来源于stack exchange,提问作者moth
相关产品推荐
相关产品推荐

