[英]How to pass arguments to the python script that is running inside docker container?
[英]Pass argument to python script running in a docker container
假設以下設置:
我想獲取此上傳的數據並將其傳遞給python腳本。
我找不到任何解釋如何將動態生成的輸入傳遞到容器中的信息。
是否可以通過從laravel應用程序內部執行shell腳本來完成此任務,該腳本包含上傳的文件作為dockerfile的ENTRYPOINT中指定的變量?
還有其他方法嗎?
一種方法是將文件上傳到Docker容器可以訪問的目錄,然后使用Python腳本在目錄中輪詢新文件。 您可以使用“ bind mounts”從Docker容器訪問本地目錄。 Google類似“如何在Docker容器和主機系統之間共享數據”之類的內容,以了解有關綁定安裝和共享卷的更多信息。
我強烈建議將tcp / ip用於此類目的。 順便說一下,在這種情況下,您將從以下方面受益:
實現真的很簡單。 您可以選擇任何框架,但對我來說合適的是Twisted
,並按如下所示實現您的python腳本:
from twisted.internet.protocol import Factory, Protocol
from twisted.protocols.basic import LineReceiver
class DataProcessor(LineReceiver):
def lineReceived(self, line):
# line contains your data
pass
Factory factory = Factory()
factory.protocol = DataProcessor
reactor.listenTCP(8080, factory)
...用於...的python腳本
只是運行它; 不要將其打包到Docker容器中。 如果它的輸入和輸出都是本地文件,並且它希望執行該操作並立即退出,則這是雙重事實:Docker提供的文件系統隔離在這里不利於您。
當然,這在技術上是可能的。 取決於支持程序容器的設置方式,與其他命令行選項一樣, docker run
結束時的“命令”對於sys.argv
的Python腳本可見。 您可以使用docker run -v
選項將主機文件系統的一部分發布到容器中。 因此,您可能可以運行類似
docker run --rm -v $PWD/files:/data \
converter_image \
python convert.py /data/in.txt /data/out.pkl
所有/data
路徑都在容器的專用文件系統空間中。
有兩個主要警告:
docker run -v
選項中的主機路徑是物理主機上的專用路徑。 如果您的HTTP服務也在容器中運行,則需要知道一些您可以寫入的主機系統路徑,該路徑在容器文件系統中也是可見的。
完全有效地運行任何docker
命令都需要root權限。 如果涉及的任何文件名或路徑都是動態的,則外殼注入攻擊可能會危害您的系統 。 要特別注意如何從可通過網絡訪問的腳本運行此腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.