В моем docker файле этот шаг никогда не попадает в кеш и всегда дает новый промежуточный контейнер:
USER $USERNAME
При работе с docker build --rm=false .
вывод около USER
всегда пропускает кеш и всегда дает другое значение ha sh, хотя предыдущее ha sh идентично.
---> b2ee21c9959f
Step 38/55 : USER $USERNAME
---> Running in 6ea8b1f6df65
---> 86640ea527b0
---> b2ee21c9959f
Step 38/55 : USER $USERNAME
---> Running in c9e822b114b0
---> e289bdbf5a1d
Я не понимаю, почему он по-прежнему пропускает кеш. Также почему USER
не идемпотент?
EDIT: оказывается, что $ USERNAME пусто, потому что ARG не был объявлен. По-прежнему странно, что он пропустил кеш.
Разница полного вывода: https://www.diffchecker.com/c5Ftyx01
Dockerfile:
ARG METEOR_VERSION=1.10.2
ARG NODE_VERSION=13.11.0
ARG NVM_VERSION=0.35.3
ARG METEOR_PROJECT_PATH=examples/leaderboard
ARG USERNAME=meteor-deploy
ARG GROUPNAME=$USERNAME
ARG PULUMI_PROJECT_NAME
FROM empiricaly/meteor:$METEOR_VERSION as meteor-with-user
SHELL ["/bin/bash", "-c"]
ARG GROUPNAME
RUN groupadd "$GROUPNAME"
ARG USERNAME
ENV HOME "/home/$USERNAME"
RUN useradd -g "$GROUPNAME" -d "$HOME" -ms /bin/bash "$USERNAME"
USER $USERNAME
WORKDIR $HOME
ARG METEOR_VERSION
RUN meteor --release "$METEOR_VERSION" --version
FROM meteor-with-user as meteor-nvm
ENV NVM_DIR "$HOME/.nvm"
ARG NODE_VERSION
RUN mkdir "$NVM_DIR"
# Install nvm with node and npm
ARG NVM_VERSION
RUN curl "https://raw.githubusercontent.com/creationix/nvm/v$NVM_VERSION/install.sh" | bash \
&& . $NVM_DIR/nvm.sh \
&& nvm install $NODE_VERSION \
&& nvm alias default $NODE_VERSION \
&& nvm use default
ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/v$NODE_VERSION/bin:$PATH
RUN . $NVM_DIR/nvm.sh && nvm --version
FROM meteor-nvm as meteor-nvm-pulumi
RUN curl -fsSL https://get.pulumi.com | bash
ENV PULUMI_PATH $HOME/.pulumi/bin
ENV PATH $PATH:$PULUMI_PATH
ENV PULUMI_CONFIG_PASSPHRASE meteor-pulumi
RUN pulumi version
FROM meteor-nvm-pulumi as local-meteor-deploy
# XXX --chown doesn't support dynamic arguments, yet.
#COPY --chown=$USERNAME:$GROUPNAME . meteor-deploy
COPY . meteor-deploy
USER root
RUN chown -R "$USERNAME:$GROUPNAME" "$HOME/meteor-deploy"
USER $USERNAME
WORKDIR $HOME/meteor-deploy
RUN . "$NVM_DIR/nvm.sh" && npm install
RUN . "$NVM_DIR/nvm.sh" \
&& npm run build:js \
&& npm link
FROM local-meteor-deploy as meteor-project
WORKDIR $HOME
ARG METEOR_PROJECT_PATH
# XXX --chown doesn't support dynamic arguments, yet.
#ADD --chown=$USERNAME:$GROUPNAME $METEOR_PROJECT_URL meteor-project
ADD $METEOR_PROJECT_PATH meteor-project
USER root
RUN chown -R $USERNAME:$GROUPNAME meteor-project
USER $USERNAME
WORKDIR $HOME/meteor-project
RUN . "$NVM_DIR/nvm.sh" && npm install -D "file://$HOME/meteor-deploy"
ARG PULUMI_PROJECT_NAME
RUN . "$NVM_DIR/nvm.sh" && npx meteor-deploy init $PULUMI_PROJECT_NAME && npm install
RUN pulumi login -l --non-interactive && pulumi stack init dev --non-interactive
FROM meteor-project
RUN . "$NVM_DIR/nvm.sh" && npx meteor-deploy stack configure default