2016-10-18 7 views
3

Я создаю контейнер Docker, который должен создать определенный скрипт bash. Я использую следующий ПУСК предложение внутри моей Dockerfile:Создание сценария bash из комментариев в Dockerfile

RUN printf "#!/bin/bash\n \ 
# This is a bash comment inside the script\ 
ls -l" > /home/myuser/script.sh 

Это хорошо работает, но в результате сценарий просто:

#!/bin/bash 
ls -l 

Итак, Баш комментарий отсутствует конечный файл. Я подозреваю, что причина в том, что Docker предполагает, что строка является комментарием Dockerfile, но поскольку она заключена внутри двойных кавычек, я думаю, ясно, что это не так.

Конечно, я мог бы решить проблему, просто включив полный сценарий в одну строку или разместив его во внешнем файле, но я думаю, что должно быть возможно включить комментарии bash внутри многострочной строки без кавычек проблем. Любое обходное решение? Я пробовал всевозможные побеги, безуспешно.

ответ

3

Вы правы, это немного странно, что Докер интерпретирует это как комментарий Dockerfile вместо комментария внутри строки. В качестве временного решения, я получил следующие работы

FROM ubuntu:latest 

RUN printf "#!/bin/bash \ 
\n# This is a bash comment inside the script \ 
\nls -l\n" > /script.sh 

RUN cat /script.sh 

Результаты этого вывода

Step 3 : RUN cat /script.sh 
---> Running in afc19e228656 
#!/bin/bash 
# This is a bash comment inside the script 
ls -l 

Если вы переместите \n к началу строки комментария он все еще генерирует правильный вывод, но больше не рассматривает, что строка как строка комментария Dockerfile.


Предполагая, что я нашел right command parsing code, и я правильно читать, Docker полоски закомментирует, прежде чем пытаться разобрать строку, чтобы увидеть, если он имеет какие-либо команды на нем.

+0

Это работает безупречно! Хорошо поймал! – jesjimher