es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Gitlab CI docker no puede iniciar sesión en Docker Hub.

Tengo dos proyectos en GitLab con el mismo archivo de configuración de CI y las mismas variables de CI. Cuando intento construir el archivo Dockerfile, uno de los proyectos pasa, pero el segundo muestra el siguiente mensaje de error:

Error: No se puede realizar un inicio de sesión interactivo desde un dispositivo no TTY

Configuración:

image: docker:latest
services:
  - docker:dind

stages:
  - build

variables:
  CONTAINER_IMAGE: sleezy/go-hello-world:${CI_COMMIT_SHORT_SHA}

build:
  stage: build
  script:
    - docker login -u ${DOCKER_USER} -p ${DOCKER_PASSWORD}
    - docker build -t ${CONTAINER_IMAGE} .
    - docker tag ${CONTAINER_IMAGE} ${CONTAINER_IMAGE}
    - docker tag ${CONTAINER_IMAGE} sleezy/go-hello-world:latest
    - docker push ${CONTAINER_IMAGE}

Como dije, todo es igual, las variables, la cuenta de DockerHub – nombre de usuario, contraseña, la configuración e incluso la versión del corredor de GitLab, así que realmente no sé por qué ocurre esto. Cualquier ayuda, gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con la configuración del Gitlab Runner. Al ejecutar una construcción de Docker, el comando docker login requiere una sesión interactiva TTY. Si el Gitlab Runner está configurado para ejecutar el trabajo en una shell no interactiva, entonces se producirá el mensaje de error mencionado.

    Para resolver este problema, puedes modificar la configuración del Gitlab Runner para utilizar una shell interactiva. Para lograr esto, debes editar el archivo config.toml del Gitlab Runner:

    [[runners]]
      name = "My Runner"
      url = "https://gitlab.com/"
      token = "MY_TOKEN"
      executor = "docker"
      [runners.docker]
        tls_verify = false
        image = "docker:latest"
        privileged = true
        disable_cache = false
        volumes = ["/cache"]
        shm_size = 0
      [runners.cache]
    

    En este archivo, modifica la propiedad executor para usar shell en lugar de docker, y establece la propiedad build_shell en bash -c.

    [[runners]]
      name = "My Runner"
      url = "https://gitlab.com/"
      token = "MY_TOKEN"
      executor = "shell"
      [runners.shell]
        build_shell = "bash -c"
      [runners.cache]
    

    Guarda el archivo y reinicia el servicio del Gitlab Runner.

    Después de realizar estos cambios, intenta ejecutar el trabajo nuevamente en ambos proyectos de Gitlab y verifica si se resuelve el problema.

Comments are closed.