从python作为sudo运行.sh脚本

时间:2019-09-11 20:30:18

标签: python linux bash docker

我正在使用python进行项目,我想自动化docker容器的创建。我的项目文件夹已经包含创建映像所需的所有文件。

其中之一是create_image.sh

docker build -t my_container:latest .

我目前正在:

sudo bash create_image.sh

但是现在我需要从python自动化该过程。 我尝试过:

import os
import subprocess
subprocess.check_call("bash -c '. create_image.sh'", shell=True)

但我收到此错误:

CalledProcessError: Command 'bash -c '. create_image.sh'' returned non-zero exit status 1.

编辑:

用例是通过API自动进行容器创建,直到现在,我都将烧瓶和python中的代码保存在了其中,在这里我被docker文件中的图像创建所困扰。其余的从模板自动执行。

2 个答案:

答案 0 :(得分:3)

您可以尝试:

subprocess.call(['sudo', 'bash', 'create_image.sh' ])

等效于

sudo bash create_image.sh

注意:让我说,有自动化docker容器创建的更好方法-请检查docker-compose,它可以轻松地构建和启动容器。如果您可以详细说明用例,我们可以为您提供一个优雅的Docker解决方案。可能不是python问题

编辑: 根据评论,最好创建一个docker-compose,并使用makefile发出docker命令。灵感-https://medium.com/@daniel.carlier/how-to-build-a-simple-flask-restful-api-with-docker-compose-2d849d738137

答案 1 :(得分:1)

如果这是因为您的用户无法在没有sudo的情况下运行docker,那么最好通过将他包括在docker组中来授予他docker API访问权限:https://askubuntu.com/questions/477551/how-can-i-use-docker-without-sudo

只需将用户添加到docker组:

sudo gpasswd -a $USER docker

此外,如果您想在python上自动化docker操作,我建议对docker使用python库:How to build an Image using Docker API Python Client?

相关问题