/bin/sh: 1: gvm: не найдено

Проблема:

Я пытаюсь создать Dockerfile, который устанавливает все компоненты для запуска Go, установки GVM (Go Version Management) и установки определенных версий Go.

Ошибка:

Когда я пытаюсь построить контейнер с:

docker build -t ##### .

Я получаю эту ошибку:

/ bin / sh: 1: gvm: не найдено

Команда '/bin/sh -c gvm install go1.4 -B' вернула ненулевой код: 127

Установлено здесь:

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

Что я пробовал:

Он явно способен установить GVM, но не может его использовать. Зачем? Я подумал, может быть, мне нужно обновить .bashrc или .bash_profile... но это не сработало, так как они не существуют.

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

Вопрос:

Почему GVM не установлен? Как мне избавиться от ошибки?

1 ответ

Решение

Ваша оболочка /bin/sh, но gvm помещает свою инициализацию в ~/.bashrcи ожидает /bin/bash,

Вам нужно найти источник gvm сценарии инициализации для запуска команд из неинтерактивной оболочки bash:

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"]

Или, что еще лучше, можно поместить команды, которые вы хотите выполнить, в один скрипт bash и добавить это к изображению.

#!/bin/bash
set -e

source /root/.gvm/scripts/gvm
gvm install go1.4
gvm use go1.4
Другие вопросы по тегам