[英]Properly automate a docker script in Python
基於構建TF圖像分類器的本教程 ,我有一個bash shell,可在其中使用以下命令運行Docker圖像:
docker run --name fooldocker -it -v $HOME/tf_files:/tf_files/ gcr.io/tensorflow/tensorflow:latest-devel
然后在此docker映像中,運行我的Python腳本:
python /tf_files/label_image.py /tf_files/myimages
exit
有用。
但是現在, 我需要在Python腳本中自動執行這些命令 。 我試過了 :
p = Popen(['docker', 'run', '--rm', '--name', 'fooldocker','-it', '-v', '$HOME/tf_files:/tf_files/', 'gcr.io/tensorflow/tensorflow:latest-devel'], stdout=PIPE)
p = Popen(['docker', 'exec', 'fooldocker', 'python', '/tf_files/label_NES.py', '/tf_files/NES/WIP'])
p = Popen(['docker', 'kill', 'fooldocker'], shell=True, stdout=PIPE, stderr=PIPE)
p = Popen(['docker', 'rm', 'fooldocker'], shell=True, stdout=PIPE, stderr=PIPE)
在運行Popen#2之后導致此錯誤:
docker: Error response from daemon: create $HOME/tf_files: "$HOME/tf_files" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed.
問題在於$HOME
不能在此單引號字符串中求值。 請嘗試使用雙引號,或者預先評估變量並將其放入命令字符串中。
另外:如果設置shell = True,則不會將命令拆分為一個列表:
p = Popen('docker kill fooldocker', shell=True, stdout=PIPE, stderr=PIPE)
這是因為Popen不會將$HOME
解釋$HOME
您的主路徑。 它是字符串$HOME
並傳遞給docker命令,該命令不允許在卷名中使用$
。
也許為了方便起見,可以使用subprocess
模塊,例如:
import subprocess
subprocess.call("echo $HOME", shell=True)
如果shell=True
指定,它將解釋$HOME
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.