Dockerfile не запускает нужный сценарий оболочки

это логика

$str = "title:'this is the new title', msg:'this_is_updated', body:'this is the new body text' ";
        $str1 = explode(',', $str);
        $array['customMessage'] = array();
        foreach ($str1 as $key => $value) {
            $str2 = explode(':', $value);

            $array['customMessage'][$str2[0]] = $str2[1];
        }


        print_r($array['customMessage']);die;
0
задан halfer 22 January 2019 в 21:28
поделиться

1 ответ

Код выхода 127 из команд оболочки означает «команда не найдена». Является ли .bashrc исполняемым? Обычно это не так, , вероятно, вы хотите его получить?

source ./home/$USERNAME/.bashrc

Как указал Дэн Фаррел В своем комментарии поиск файла в команде RUN будет действовать только внутри этой оболочки.

Источник .bashrc во время сборки

Если вы хотите, чтобы он имел эффект для более поздних команд в сборке, вам нужно запустить их все в одном выражении RUN. В приведенном ниже .bashrc источник в той же оболочке, что и catkin_make запускается.

RUN . /home/ros/.bashrc && \ 
    cd /home/$USERNAME/catkin_ws && \
    catkin_make

Для получения файла .bashrc при запуске контейнера

Что должно произойти, когда контейнер запускается с помощью docker run, указывается с помощью оператора ENTRYPOINT. Если вы просто хотите простую подсказку bash, укажите /bin/bash. Оболочка будет запускаться с пользователем, указанным в операторе USER.

Итак, если вы добавите следующее в конец вашего Dockerfile

USER ros
ENTRYPOINT /bin/bash

Когда кто-то запускает контейнер, используя docker run -it <containerName>, он попадает в оболочку bash как пользователь ros. Bash автоматически создаст файл /home/ros/.bashrc, и все определения внутри будут доступны в оболочке. (Ваш оператор RUN, содержащий файл .bashrc, может быть удален

0
ответ дан danielorn 22 January 2019 в 21:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: