Я пытаюсь вытащить репозиторий, над которым я работаю при сборке докеров, поэтому я последовал этот учебник, поэтому я добавил в свой Dockerfile
# this is our first build stage, it will not persist in the final image
FROM ubuntu as intermediate
# install git
RUN apt-get update \
apt-get upgrade \
apt-get install git
# add credentials on build
RUN mkdir ~/.ssh && ln -s /run/secrets/host_ssh_key ~/.ssh/id_rsa
# make sure your domain is accepted
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.org >> /root/.ssh/known_hosts
RUN git clone [email protected]:my-repo/myproject.git
FROM ubuntu
# copy the repository form the previous image
COPY --from=intermediate /your-repo /srv/your-repo
В моем docker-compose.yml я добавил
secrets:
host_ssh_key:
file: ~/.ssh/id_rsa
И я добавляю
secrets:
- host_ssh_key
В одном из сервисов.
Поскольку это только для моего локального использования (я не планирую развертывать или использовать это для производства, я просто хочу протестировать его), можно использовать его таким образом - если он будет работать, потому что в настоящее время сборка не выполняется на этап установки git с ошибкой
E: The update command takes no arguments
ERROR: Service 'web' failed to build: The command '/bin/sh -c apt-get update apt-get upgrade apt-get install git' returned a non-zero code: 100
Что мне не хватает?
Конечно, хотя в итоге я поступил иначе. Спасибо за помощь :)





Вы слишком много это анализируете. Это просто опечатка. Должно быть:
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y git
Это 3 отдельные команды.
Все еще получаю The command '/bin/sh -c apt-get update && apt-get upgrade && apt-get install git' returned a non-zero code: 1
Другой вопрос, теперь apt-get install ждет, пока вы отправите установку. Поэтому вам следует добавить -y после install. Из вашей опечатки мне кажется, что вы не умеете работать с Linux. Может стоит почитать все вокруг apt-get?
Я попробую с флагом, но в целом я, вероятно, просто пропущу git clone в процессе сборки. По крайней мере, это то, что делают DevOps. Я просто тестирую докер, а не моя основная область знаний: D
в узле: alpine: RUN apk update && \ apk upgrade && \ apk add git
Некоторые мысли:
apt-get install git на apt-get install --assume-yes git. Без --assume-yes он предложит вам подтверждение, которое вы не можете дать, и будет достаточно умен, чтобы понять это и предположить, что вы имели в виду «НЕТ».0600. Я бы просто скопировал его и конкретно chmod 0600 ~/.ssh/id_rsa, чтобы быть уверенным.В целом ваш Dockerfile выглядит очень умно, и я почитал его несколько свежих идей.
Просто прочтите руководство - очень хорошо. Они используют переключатель -y. Пользуюсь переключателем --assume-yes. Это синонимы, и я думаю, это то, чего вам не хватает. Если вы предоставили действительный файл id_rsa, то мой второй пункт неприменим.
ваше изменение вопроса должно быть отменено, оно явно противоречит намерениям автора.
Для тех, кто работал с образами alpine, RUN apk add --no-cache git помог мне.
Спасибо, это сэкономило время. Пожалуйста, почему вы использовали --- no-cache?
Есть ли шанс принять ответ? Таким образом, это указывает другим, что какое-то решение было полезно для вас. Было бы здорово, если бы вы ответили на все ваши вопросы.