la instalación de git falla en Dockerfile

4 minutos de lectura

avatar de usuario
dingo_d

Estoy tratando de extraer el repositorio en el que estoy trabajando mientras hago una compilación de Docker, así que seguí este tutorial así que agregué en mi 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 git@github.com:my-repo/myproject.git

FROM ubuntu
# copy the repository form the previous image
COPY --from=intermediate /your-repo /srv/your-repo

En mi docker-compose.yml yo añadí

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

y estoy agregando

secrets:
  - host_ssh_key

En uno de los servicios.

Dado que esto es solo para mi uso local (no planeo implementar o usar esto para la producción, solo quiero probarlo), está bien usarlo de esta manera, si funciona porque actualmente la compilación falla en la etapa de instalación de git con error

E: El comando de actualización no toma argumentos

ERROR: el servicio ‘web’ no se pudo compilar: el comando ‘/bin/sh -c apt-get update apt-get upgrade apt-get install git’ devolvió un código distinto de cero: 100

¿Qué me estoy perdiendo?

  • ¿Hay alguna posibilidad de que puedas aceptar una respuesta? Para que indique a los demás que alguna solución fue útil para usted. Sería genial si lo hiciera en todas sus preguntas que tienen respuestas.

    – Alex Karshin

    16 de abril de 2019 a las 10:22


  • Claro, aunque al final lo hice de otra manera. Gracias por la ayuda 🙂

    – dingo_d

    16 de abril de 2019 a las 12:53

  • Sí, está bien para local y, de hecho, ni siquiera es una idea terrible para un servidor de desarrollo (¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡)

    – Shayne

    15 de julio a las 3:24

avatar de usuario
Alex Karshin

Estás sobreanalizando esto. Es solo un simple error tipográfico. Debiera ser:

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

Esos son 3 comandos separados.

  • Todavía recibiendo The command '/bin/sh -c apt-get update && apt-get upgrade && apt-get install git' returned a non-zero code: 1

    – dingo_d

    13 de junio de 2018 a las 13:18

  • Es otro tema, ahora apt-get install está esperando que envíes la instalación. Entonces deberías agregar -y después install. Por tu error me parece que no sabes cómo trabajar con Linux. Tal vez deberías leer todo alrededor apt-get?

    – Alex Karshin

    13 de junio de 2018 a las 14:07

  • Probaré con la bandera, pero en general probablemente me saltearé el clon de git en el proceso de compilación. Al menos eso es lo que están haciendo los desarrolladores. Solo estoy probando la ventana acoplable, no es mi área principal de especialización: D

    – dingo_d

    13 de junio de 2018 a las 16:26

  • en nodo: alpine: EJECUTAR actualización de apk && \ actualización de apk && \ apk agregar git

    – itzhar

    17 de julio de 2019 a las 22:21


  • Correr update después de la instalación de git. Prueba ese: RUN apt-get install --assume-yes git && apt-get update && apt-get clean all

    – Zhivko.Kostadinov

    14 de junio a las 9:25


Para aquellos que trabajan con alpine imágenes, RUN apk add --no-cache git hizo el truco para mí.

  • Gracias, esto me ahorró algo de tiempo. Por favor, ¿por qué usaste —no-cache?

    – Código de captura

    11 de abril de 2021 a las 12:20

avatar de usuario
Emory

Algunos pensamientos:

    1. Reemplazar apt-get install git con apt-get install --assume-yes git. Sin el --assume-yes le pedirá confirmación, que no puede dar y será lo suficientemente inteligente como para darse cuenta y asumir que usted quiso decir “NO”.
    1. Agregó la clave ssh, pero ¿confirmó que era 0600. Simplemente lo copiaría y específicamente chmod 0600 ~/.ssh/id_rsa para estar seguro.

En general, su Dockerfile se ve muy inteligente y obtuve algunas ideas nuevas al leerlo.

  • Acabo de leer el tutorial – muy bueno. Ellos usan el -y cambiar. Yo uso el --assume-yes cambiar. Son sinónimos y creo que eso es lo que te estás perdiendo. Si proporcionó un archivo ‘id_rsa’ válido, entonces mi segundo punto no es aplicable.

    – Emory

    13 de junio de 2018 a las 13:53

  • su edición de la pregunta debe revertirse, claramente entra en conflicto con la intención del autor.

    – Alex Karshin

    13 de junio de 2018 a las 14:12

¿Ha sido útil esta solución?