2015-11-06 1308 views
0

是否可以在啓動Docker容器時自動運行python腳本?啓動Docker容器時自動運行Python腳本

我的命令附加到的圖像是:

docker run -i -t --entrypoint /bin/bash myimage -s 

有沒有辦法來添加運行在啓動它的腳本的附加命令? 我不想使用Dockerfile,因爲我使用的一些python模塊來自私人回購站,需要手動下載,所以Dockerfile不會完全構建我想要的圖像。

+0

**搬運工運行-i -t --entrypoint /斌/慶典MYIMAGE -s蟒蛇/路徑/到/ python_file.py **? –

回答

1

事實上有。只是不要使用--entrypoint。相反:

docker run -it myimage /bin/bash -c /run.sh 

顯然,這種假設圖像本身包含在該位置/run.sh一個簡單的bash腳本。

#!/bin/bash 
command1 
command2 
command3 
... 

如果你不想這樣,你可以安裝運行的容器內的當前文件夾,然後運行本地腳本:

docker run -it -v $(pwd):/mnt myimage /bin/bash -c /mnt/run.sh 

ENTRYPOINTCMD似乎是混亂的常見原因。

想想這樣說:

  • ENTRYPOINT是一種硬編碼某種行爲是不能設置它後更改。
  • CMD是提供要運行的命令的默認方式。

Docker容器可以設置爲獨立運行的應用程序運行。如果你非常喜歡,你可以創建一個一次性容器來接受命令行參數(例如一個文件),把它拉進來,發揮他們的魔力並返回一個處理過的文件。有些人使用它來設置具有不同配置的構建環境,只需要按需運行它們,而不是混淆主機。

但是,您的使用情況感覺很乏味,因爲您顯然是手動進行安裝。它會更容易設置下載憑證environment variables,像這樣:

docker run -d -e "DEEP=purple" -e "LED=zeppelin" myimage /bin/bash -c /run.sh 

然後,您可以使用這些腳本的佔位符內。這樣,你就可以得到兩全其美的好處。爲了增加安全性,您應該run.sh取消設置環境變量,一旦被使用,如:

#!/bin/bash 
command1 
command2 
command3 
... 
unset DEEP 
unset LED 
+0

這是違反碼頭最佳做法,因爲它不處理信號轉發 - https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#entrypoint –

+0

@VincentDeSmet:如何創建一個新的答案相關信息和示例腳本呢?這對每個人都有好處。 – herrbischoff