Dockerfile使用构建参数动态设置mongodb用户UID/GID不生效如何解决
问题根本原因
--build-arg 传递的是Docker构建阶段的临时参数,必须在Dockerfile中通过 ARG 指令显式声明后才能被识别,你之前未声明ARG直接用ENV读取参数,传递的数值无法被构建过程捕获,所以变量为空不生效。
修复后的Dockerfile
FROM mongo:4.4.9 # 声明构建参数,接收--build-arg传入的值 ARG MONGO_UID ARG MONGO_GID # 若需要这两个参数在容器运行时也可访问,可保留以下ENV配置,仅构建时使用可以删除 ENV MONGO_UID=${MONGO_UID} ENV MONGO_GID=${MONGO_GID} RUN mkdir -p /var/lib/mongo \ && usermod -u ${MONGO_UID} mongodb \ && groupmod -g ${MONGO_GID} mongodb \ && chown -R mongodb:mongodb /var/lib/mongo \ && chown -R mongodb:mongodb /var/log/mongodb USER mongodb
构建命令
原有构建命令无需修改:
docker build --build-arg MONGO_UID=1002 --build-arg MONGO_GID=1003 .
验证方法
构建完成后执行以下命令,若输出的uid、gid和你传入的数值一致则说明配置生效:
docker run --rm <你构建的镜像名称> id mongodb
优化建议
可以直接读取宿主机当前用户的UID/GID传入,无需手动填写数值,适配不同环境:
docker build --build-arg MONGO_UID=$(id -u) --build-arg MONGO_GID=$(id -g) .
内容的提问来源于stack exchange,提问作者M. Gara
相关产品推荐
相关产品推荐

