Предваряющая команда с помощью SHELL не работаетLinux

Ответить
Anonymous
 Предваряющая команда с помощью SHELL не работает

Сообщение Anonymous »

У меня есть script.sh, как показано ниже:

Код: Выделить всё

MYVAR=world
Тогда у меня есть Dockerfile, как показано ниже:

Код: Выделить всё

FROM redhat/ubi8
COPY script.sh /script.sh

# Source the script and echo. Expected to see: hello world
RUN source /script.sh && echo hello $MYVAR

# Run echo without sourcing script. Expected to see: hello
RUN echo hello $MYVAR

# Modify SHELL and echo. Expected to see: hello world
SHELL ["/bin/bash", "-c", "'source /script.sh'", "&&"]
RUN echo hello $MYVAR
Последние команды SHELL и RUN не работают должным образом. Я ожидаю, что в конечном итоге последней командой RUN будет /bin/bash -c 'source/script.sh' && echo hello $MYVAR. Запускаем сборку докера. --preview Plain действительно указывает на то, что это команда. И если я запускаю эту команду в своей командной строке, она работает.
Но при сборке я получаю следующую ошибку:

Код: Выделить всё

#9 [5/5] RUN echo hello $MYVAR
#9 0.194 &&: source /script.sh: No such file or directory
#9 ERROR: process "/bin/bash -c 'source /script.sh' && echo hello $MYVAR" did not complete successfully: exit code: 127
------
> [5/5] RUN echo hello $MYVAR:
0.194 &&: source /script.sh: No such file or directory
------
Dockerfile:12
--------------------
10 |     SHELL ["/bin/bash", "-c", "'source /script.sh'", "&&"]
11 |
12 | >>> RUN echo hello $MYVAR
13 |
--------------------
ERROR: failed to solve: process "/bin/bash -c 'source /script.sh' && echo hello $MYVAR" did not complete successfully: exit code: 127
Почему эта комбинация SHELL и RUN не работает в моем Dockerfile? Я пробовал другие альтернативы команде SHELL, включая следующие, но ни один из них не сработал. Большинство из них привели к ошибке с разными кодами выхода.
У этого кода выхода нет, но эхо ничего не отображает:

Код: Выделить всё

SHELL ["/bin/bash", "-c", "source /script.sh", "&&"]

Код: Выделить всё

SHELL ["/bin/bash", "-c", "\"source /script.sh\"", "&&"]

Код: Выделить всё

SHELL ["/bin/bash", "-c", "source /script.sh &&"]

Код: Выделить всё

SHELL ["/bin/bash", "-c", "'source /script.sh' &&"]

Код: Выделить всё

SHELL ["/bin/bash", "-c", "\"source /script.sh" &&"]
Следующие вопросы связаны, но не точны:
  • Сборка Docker — используйте одну и ту же оболочку для всех команд RUN
  • Запускать скрипт перед каждым запуском в Dockerfile?


Подробнее здесь: https://stackoverflow.com/questions/791 ... oesnt-work
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»