Pasar al contenido principal
Monoforms Web Development
CAPTCHA
1 + 9 =
Resuelva este simple problema matemático y escriba la solución; por ejemplo: Para 1+3, escriba 4.
Esta pregunta es para comprobar si usted es un visitante humano y prevenir envíos de spam automatizado.

Main navigation

  • Home
  • Sobre mi
  • Contacto
CAPTCHA
3 + 5 =
Resuelva este simple problema matemático y escriba la solución; por ejemplo: Para 1+3, escriba 4.
Esta pregunta es para comprobar si usted es un visitante humano y prevenir envíos de spam automatizado.

Sobrescribir enlaces de ayuda a la navegación

  1. Home
  2. Docker: Ignorar El Directorio Vendor En un Proyecto de Go.

Docker: Ignorar el directorio vendor en un proyecto de Go.

By peter, 9 Diciembre, 2024

Dockerbuild in Go projects

Al intentar construir una imagen con Docker, me encontré con el siguiente error:

go: inconsistent vendoring in /go/src/api-my-krimicell:
github.com/bradfitz/[email protected]: is marked as explicit in vendor/modules.txt, but not explicitly required in go.mod

To ignore the vendor directory, use -mod=readonly or -mod=mod.
To sync the vendor directory, run:
	go mod vendor

Esto sucedió porque había eliminado la dependencia gomemcache de mi proyecto al darme cuenta de que no se estaba utilizando, pero olvidé actualizar el proyecto con el comando:

go mod tidy

Este comando sincroniza las dependencias declaradas en go.mod con lo que realmente se utiliza en el código, eliminando lo que no es necesario y añadiendo lo que falta.

Sin embargo, dado que estaba construyendo mi aplicación con Docker y el directorio vendor/ ya existía, el error persistía. El problema se debía a que el directorio vendor/ contenía referencias desactualizadas de dependencias eliminadas. En lugar de regenerar el directorio vendor/, decidí indicarle a go build que ignorara este directorio. Esto lo logré modificando mi Dockerfile de la siguiente manera:

RUN GOFLAGS=-buildvcs=false CGO_ENABLED=0 GOOS=linux  \
    go build -a -installsuffix cgo -ldflags="-w -s" -mod=readonly -o api-my-krimicell ./cmd/api-my-krimicell

La clave aquí es el flag -mod=readonly, que le dice a go build que ignore el directorio vendor/ y utilice las dependencias directamente de go.mod y go.sum. Esto resolvió el problema y me permitió construir la imagen correctamente.

Recuerden siempre ejecutar go mod tidy para mantener limpio su proyecto.

¡Saludos!

Contenido reciente

  • Como limpiar usings sin usar en Rider
  • Instalando apache, mysql y php en Ubuntu
  • Cómo liberé 12GB en mi servidor y reviví mi sitio web (sin llorar… mucho)
  • ¿Que son los sitios web agregadores y los anuncios clasificados?
  • Mi Experiencia con Docker, Podman y Kubernetes
  • Lo más destacado del AWS User Group Puebla
  • Docker: Ignorar el directorio vendor en un proyecto de Go.
  • Instala Kubernetes en Ubuntu 22.04 para pruebas
  • Serverless, Lambda y Kubernetes: Fundamentos para la nube
  • Ejecuta tu lambda de Golang en AWS SAM de forma local

Recomendados

  • Biodiv
  • Medium
RSS feed

Política de privacidad

Términos de uso

Recomendados

  • Biodiv
  • Medium
Powered by Drupal

Monoforms ©2021 Created by Pedro Rojas Reyes