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!