JInput доступ к различным контроллерам

Если вы используете Docker 1.12 или новее, просто используйте SHELL!

Short Answer:

general:

SHELL ["/bin/bash", "-c"] 

для python vituralenv :

SHELL ["/bin/bash", "-c", "source /usr/local/bin/virtualenvwrapper.sh"]

Длительный ответ:

из https://docs.docker.com/engine/reference/builder/#/shell

SHELL ["executable", "parameters"]

Команда SHELL позволяет использовать оболочку по умолчанию, используемую для оболочки команд команд для переопределения. Стандартная оболочка в Linux - это ["/ bin / sh", "-c"], а в Windows - ["cmd", "/ S", "/ C"]. Инструкция SHELL должна быть записана в форме JSON в файле Docker.

Инструкция SHELL особенно полезна в Windows, где есть две обычно используемые и совершенно разные родные оболочки: cmd и powershell, а также альтернативные оболочки включая sh.

Инструкция SHELL может появляться несколько раз. Каждая команда SHELL отменяет все предыдущие инструкции SHELL и влияет на все последующие инструкции. Например:

FROM microsoft/windowsservercore

# Executed as cmd /S /C echo default
RUN echo default

# Executed as cmd /S /C powershell -command Write-Host default
RUN powershell -command Write-Host default

# Executed as powershell -command Write-Host hello
SHELL ["powershell", "-command"]
RUN Write-Host hello

# Executed as cmd /S /C echo hello
SHELL ["cmd", "/S"", "/C"]
RUN echo hello

Следующие инструкции могут быть затронуты инструкцией SHELL, когда форма оболочки из них используется в файле Docker: RUN, CMD и ENTRYPOINT.

Следующие пример - общий шаблон, найденный в Windows, который можно оптимизировать с помощью инструкции SHELL:

...
RUN powershell -command Execute-MyCmdlet -param1 "c:\foo.txt"
...

Команда, вызываемая докером, будет:

cmd /S /C powershell -command Execute-MyCmdlet -param1 "c:\foo.txt"

Это неэффективно для две причины. Во-первых, вызывается ненужный командный процессор cmd.exe (aka shell). Во-вторых, для каждой инструкции RUN в форме оболочки требуется дополнительная команда powershell-command, префиксная команда.

Чтобы сделать это более эффективным, можно использовать один из двух механизмов. Один из них - использовать форму JSON команды RUN, такую ​​как:

...
RUN ["powershell", "-command", "Execute-MyCmdlet", "-param1 \"c:\\foo.txt\""]
...

. Хотя форма JSON недвусмысленная и не использует ненужный cmd.exe, для этого требуется более многословие, цитируя и убегая. Альтернативным механизмом является использование команды SHELL и формы оболочки, что делает более естественным синтаксис для пользователей Windows, особенно в сочетании с директивой анализа парсера:

# escape=`

FROM microsoft/nanoserver
SHELL ["powershell","-command"]
RUN New-Item -ItemType Directory C:\Example
ADD Execute-MyCmdlet.ps1 c:\example\
RUN c:\example\Execute-MyCmdlet -sample 'hello world'

Результат:

PS E:\docker\build\shell> docker build -t shell .
Sending build context to Docker daemon 4.096 kB
Step 1/5 : FROM microsoft/nanoserver
 ---> 22738ff49c6d
Step 2/5 : SHELL powershell -command
 ---> Running in 6fcdb6855ae2
 ---> 6331462d4300
Removing intermediate container 6fcdb6855ae2
Step 3/5 : RUN New-Item -ItemType Directory C:\Example
 ---> Running in d0eef8386e97


    Directory: C:\


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       10/28/2016  11:26 AM                Example


 ---> 3f2fbf1395d9
Removing intermediate container d0eef8386e97
Step 4/5 : ADD Execute-MyCmdlet.ps1 c:\example\
 ---> a955b2621c31
Removing intermediate container b825593d39fc
Step 5/5 : RUN c:\example\Execute-MyCmdlet 'hello world'
 ---> Running in be6d8e63fe75
hello world
 ---> 8e559e9bf424
Removing intermediate container be6d8e63fe75
Successfully built 8e559e9bf424
PS E:\docker\build\shell>

Инструкция SHELL также может использоваться для изменения способа работы оболочки. Например, используя SHELL cmd / S / C / V: ON | OFF в Windows, можно было бы модифицировать семантику расширения замедленной среды.

Инструкция SHELL может также использоваться в Linux, если требуется чередование оболочки такие как zsh, csh, tcsh и другие.

Функция SHELL была добавлена ​​в Docker 1.12.

0
задан LostJ3ster 16 January 2019 в 21:40
поделиться