Problema:

Estoy intentando crear un Dockerfile que instale todos los componentes para ejecutar Go, para instalar GVM (Go Version Management) < / a> y para instalar versiones de Go específicas.

Error:

Cuando intento construir el contenedor con:

docker build -t ##### .

Recibo este error:

/ bin / sh: 1: gvm: no encontrado

El comando '/ bin / sh -c gvm install go1.4 -B' devolvió un código distinto de cero: 127

Instalado aquí:

/root/.gvm/scripts/env/gvm
/root/.gvm/scripts/gvm
/root/.gvm/bin/gvm

Lo que intenté:

Claramente puede instalar GVM pero no puede usarlo. ¿Por qué? Pensé que tal vez necesitaba actualizar el .bashrc o el .bash_profile ... pero eso no funcionó, ya que no existen.

Dockerfile:

FROM #####/#####

#Installing Golang dependencies
RUN apt-get -y install curl git mercurial make binutils bison gcc build-essential

#Installing Golang

RUN ["/bin/bash", "-c", "bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)"]
#gvm does not exist here... why?
RUN gvm install go1.4 -B
RUN gvm use go1.4

Pregunta:

¿Por qué parece que GVM no está instalado? ¿Cómo me deshago del error?

1
kemicofa ghost 3 ene. 2017 a las 19:00
¿Dónde está instalando gvm? ¿Está en tu camino? ¿Por qué necesita gvm en un contenedor, que generalmente está diseñado específicamente para una aplicación?
 – 
JimB
3 ene. 2017 a las 19:02
Usándolo por razones de desarrollo. Pensé que sería más fácil manejar las actualizaciones de Go, verifique la actualización para ver dónde está instalado GVM. GVM generalmente se agrega a la RUTA automáticamente, ¿no? No está en el PATH, lo agregaré más tarde y veré si funciona.
 – 
kemicofa ghost
3 ene. 2017 a las 19:05

1 respuesta

La mejor respuesta

Su shell es /bin/sh, pero gvm pone su inicialización en ~/.bashrc y espera /bin/bash.

Necesita obtener los scripts de inicialización gvm para ejecutar los comandos desde un shell bash no interactivo:

RUN ["/bin/bash", "-c", ". /root/.gvm/scripts/gvm && gvm install go1.4 -B"]
RUN ["/bin/bash", "-c", ". /root/.gvm/scripts/gvm && gvm use go1.4"]

O incluso mejor podría ser poner los comandos que desea ejecutar en un solo script bash y agregarlo a la imagen.

#!/bin/bash
set -e

source /root/.gvm/scripts/gvm
gvm install go1.4
gvm use go1.4
3
JimB 4 ene. 2017 a las 18:35