【问题标题】:Environment variables inside DockerfileDockerfile 中的环境变量
【发布时间】:2021-09-24 22:16:23
【问题描述】:

如您所见,对 docker 来说是新手。我正在尝试构建一个 docker 镜像,并将当前 GID/UID 分配给我将在 docker 镜像中运行的 usermod/groupmod 命令。

我尝试了使用环境变量的命令,但它没有工作

1002和1003是连接用户的用户GID/UID

FROM mongo:4.4.9

# setup folder before switching to user
RUN mkdir /var/lib/mongo
RUN usermod -u 1002 mongodb
RUN groupmod -g 1003 mongodb
RUN chown mongodb:mongodb /var/lib/mongo
RUN chown mongodb:mongodb /var/log/mongodb

USER mongodb

我试过这个:

FROM mongo:4.4.9

ENV MONGO_UID=$MONGO_UID
ENV MONGO_GID=$MONGO_GID

# setup folder before switching to user
RUN mkdir /var/lib/mongo
RUN usermod -u $MONGO_UID mongodb
RUN groupmod -g $MONGO_GID mongodb
RUN chown mongodb:mongodb /var/lib/mongo
RUN chown mongodb:mongodb /var/log/mongodb

USER mongodb

并以此构建:

docker build --build-arg MONGO_UID=1002 --build-arg MONGO_GID=1003 .

感谢您的帮助!

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    您需要将它们声明为参数而不是环境变量,因为您在 docker build 命令中传递参数。

    Dockerfile 应该是这样的:

    FROM mongo:4.4.9
    
    ARG MONGO_UID
    ARG MONGO_GID
    
    # setup folder before switching to user
    RUN mkdir /var/lib/mongo
    RUN usermod -u ${MONGO_UID} mongodb
    RUN groupmod -g ${MONGO_GID} mongodb
    RUN chown mongodb:mongodb /var/lib/mongo
    RUN chown mongodb:mongodb /var/log/mongodb
    
    USER mongodb
    

    如果您需要将它们作为容器内的环境变量,那么您需要说ENV 等于ARG

    ARG MONGO_UID
    ENV MONGO_UID=${MONGO_UID}
    

    如果您有兴趣,也可以给argument(与ENV 相同)一个default value

    ARG MONGO_UID=default
    

    没有默认值将强制用户为参数提供值。

    【讨论】:

    • @M.Gara 欢迎你 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2019-12-07
    • 1970-01-01
    • 2021-12-20
    相关资源
    最近更新 更多