簡體   English   中英

在Python中正確自動化Docker腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM