На шаге USER файла Dockerfile всегда отсутствует кеш - PullRequest
0 голосов
/ 09 мая 2020

В моем 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

1 Ответ

0 голосов
/ 09 мая 2020

Звучит как ошибка.

Что стоит попробовать:

  1. Обновите Docker до последней версии, посмотрите, исправит ли это.
  2. Попробуйте создать минимальный репродуктор. Может помочь вам что-то уловить, но если у вас минимальный репродуктор, вы можете сообщить об ошибке по адресу https://github.com/moby/moby/issues или, возможно, найти обходной путь.

Одним из возможных способов обхода является попытка использования бэкенда BuildKit , альтернативный бэкэнд сборки.

  1. Добавить # syntax = docker/dockerfile:1.1-experimental в первую строку Dockerfile.
  2. export DOCKER_BUILDKIT=1
  3. Запустить сборку.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...