#git #docker #dockerfile
#git #docker #dockerfile
Вопрос:
Я пытаюсь клонировать частное репозиторий, размещенный bitbucket, в контейнер docker. Мой Dockerfile выглядит следующим образом
RUN git clone git@deploy:<blabla>.git /src/<blabla>
WORKDIR /src/<blabla>
RUN cd /src/<blabla>
RUN git pull --all --tags
RUN git checkout v1.1.2
RUN pip install .
Проблема, с которой я столкнулся: мне сказали, что тег v1.1.2
не существует. Чтобы подтвердить это, я изменяю Dockerfile с помощью
RUN git clone git@deploy:<blabla>.git /src/<blabla>
WORKDIR /src/<blabla>
RUN cd /src/<blabla>
RUN git pull --all --tags
RUN git branch
RUN git tag
RUN git checkout v1.1.2
RUN pip install .
где я вижу, что последняя созданная ветвь и последний тег теперь действительно клонированы. Я нашел обходной путь, который заключается в двойном извлечении
RUN git clone git@deploy:<blabla>.git /src/<blabla>
WORKDIR /src/<blabla>
RUN cd /src/<blabla>
RUN git pull --all --tags
RUN git pull --all --tags
RUN git checkout v1.1.2
RUN pip install .
и теперь все работает отлично.
Комментарии:
1. git clone —mirror <url> клонирует все ветви и теги, чем вы можете воспользоваться в git checkout версии v1.1.2
2. Происходит ли то же самое с
docker build --no-cache
?
Ответ №1:
Попробуйте это:
RUN git clone -b 'v1.1.2' --single-branch --depth 1 git@deploy:<blabla>.git /src/<blabla>
amp;amp; cd /src/<blabla>
amp;amp; pip install .
WORKDIR /src/<blabla>
Git clone может напрямую извлекать тег, а также добавлять --single-branch
и --depth
избегать клонирования всей истории репозитория в контейнер.
Он немного компактнее и позволяет избежать дополнительных слоев. Вы все еще можете разбить его на несколько строк, которые вы хотите.