dingo_d
dingo_d

Reputation: 11670

git install fails in Dockerfile

I'm trying to pull the repository I'm working on while doing a docker build, so I followed this tutorial so I added in my 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

In my docker-compose.yml I added

secrets:
  host_ssh_key:
    file: ~/.ssh/id_rsa

And I'm adding

secrets:
  - host_ssh_key

In one of the service.

Since this is only for my local use (I don't plan on deploying or using this for the production, I just want to test it out) it's fine to use it this way - if it'll work because currently the build fails at the git install stage with error

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

What am I missing?

Upvotes: 65

Views: 118644

Answers (3)

Jairo Lozano
Jairo Lozano

Reputation: 4511

For those working with alpine images, RUN apk add --no-cache git did the trick for me.

Upvotes: 20

emory
emory

Reputation: 10891

Some thoughts:

    1. Replace apt-get install git with apt-get install --assume-yes git. Without the --assume-yes it will prompt you for confirmation, which you are unable to give and it will be smart enough to figure that out and assume you meant "NO".
    1. You added the ssh key, but did you confirm it was 0600. I would just copy it and specifically chmod 0600 ~/.ssh/id_rsa to be sure.

Overall, your Dockerfile looks very clever and I got some fresh ideas from reading it.

Upvotes: 14

Kevin Kopf
Kevin Kopf

Reputation: 14185

You are overanalyzing this. It's just a simple typo. Should be:

RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y git

Those are 3 separate commands.

Upvotes: 139

Related Questions