是否可以在啓動Docker容器時自動運行python腳本?啓動Docker容器時自動運行Python腳本
我的命令附加到的圖像是:
docker run -i -t --entrypoint /bin/bash myimage -s
有沒有辦法來添加運行在啓動它的腳本的附加命令? 我不想使用Dockerfile,因爲我使用的一些python模塊來自私人回購站,需要手動下載,所以Dockerfile不會完全構建我想要的圖像。
是否可以在啓動Docker容器時自動運行python腳本?啓動Docker容器時自動運行Python腳本
我的命令附加到的圖像是:
docker run -i -t --entrypoint /bin/bash myimage -s
有沒有辦法來添加運行在啓動它的腳本的附加命令? 我不想使用Dockerfile,因爲我使用的一些python模塊來自私人回購站,需要手動下載,所以Dockerfile不會完全構建我想要的圖像。
事實上有。只是不要使用--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
ENTRYPOINT
與CMD
似乎是混亂的常見原因。
想想這樣說:
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
這是違反碼頭最佳做法,因爲它不處理信號轉發 - https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#entrypoint –
@VincentDeSmet:如何創建一個新的答案相關信息和示例腳本呢?這對每個人都有好處。 – herrbischoff
**搬運工運行-i -t --entrypoint /斌/慶典MYIMAGE -s蟒蛇/路徑/到/ python_file.py **? –