2

正如您所注意到的,对 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 .

谢谢你的帮助 !

4

1 回答 1

2

您需要将它们声明为参数而不是环境变量,因为您在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(same to ENV) a :default value

ARG MONGO_UID=default

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

于 2021-09-24T22:44:46.713 回答