在Python中正确自动化docker脚本

时间:2016-11-27 18:40:30

标签: python bash docker

基于this tutorial构建TF图像分类器,我有一个bash shell,我在其中使用以下命令运行Docker镜像:

 <datasource jta="true" jndi-name="java:jboss/datasource/AssetTrackerDS"

然后在这个docker镜像中我运行我的Python脚本:

<jta-data-source>java:jboss/datasources/AssetTrackerDS</jta-data-source>

有效。

但是现在,我需要在Python脚本中自动执行这些命令。我试过了:

docker run --name fooldocker -it -v $HOME/tf_files:/tf_files/ gcr.io/tensorflow/tensorflow:latest-devel

在Popen#2运行后导致此错误:

python /tf_files/label_image.py /tf_files/myimages
exit

2 个答案:

答案 0 :(得分:1)

问题是无法在此单引号字符串中评估$HOME。尝试双引号,或预先评估变量并将其放入命令字符串。

另外:如果设置shell = True,则不要将命令拆分为列表:

p = Popen('docker kill fooldocker', shell=True, stdout=PIPE, stderr=PIPE)

答案 1 :(得分:0)

这是因为Popen没有将$HOME解释为你的家乡道路。 它是字符串$HOME并传递给docker命令,该命令不允许在卷名中使用$

为方便起见,您可以使用subprocess模块,例如:

import subprocess
subprocess.call("echo $HOME", shell=True)

如果指定了$HOME,它会解释shell=True