使用Python脚本启动Docker容器

11
我想从Python脚本启动Docker容器。当我通过我的代码调用Docker镜像时,无法启动Docker容器。
import subprocess
import docker


from subprocess import Popen, PIPE


def kill_and_remove(ctr_name):
    for action in ('kill', 'rm'):
        p = Popen('docker %s %s' % (action, ctr_name), shell=True,
                  stdout=PIPE, stderr=PIPE)
        if p.wait() != 0:
            raise RuntimeError(p.stderr.read())


def execute():
    ctr_name = 'sml/tools:8' # docker image file name
    p = Popen(['docker', 'run', '-v','/lib/modules:/lib/modules',
               '--cap-add','NET_ADMIN','--name','o-9000','--restart',
               'always', ctr_name ,'startup',' --base-port',
               9000,' --orchestrator-integration-license',
               ' --orchestrator-integration-license','jaVl7qdgLyxo6WRY5ykUTWNRl7Y8IzJxhRjEUpKCC9Q='
               ,'--orchestrator-integration-mode'],
              stdin=PIPE)
    out = p.stdin.write('Something')

    if p.wait() == -20:  # Happens on timeout

        kill_and_remove(ctr_name)

    return out

以下是Docker容器的详细信息供您参考。
dev@dev-VirtualBox:sudo docker ps -a
[sudo] password for dev: 
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS               NAMES
79b3b9d215f3        sml/tools:8   "/home/loadtest/st..."   46 hours ago        Up 46 hours                             pcap_replay_192.168.212.131_9000_delay_dirty_1

有人可以建议我为什么无法通过我的程序启动容器吗?

1个回答

24

谢谢您的回复,我知道docker-py,它看起来很复杂,我使用简单的subprocess.Popen来运行docker容器,您能告诉我我的代码有什么问题吗? - DevanDev
当我通过docker_py运行它时,我遇到了以下错误: raise ConnectionError(e, request=request) requests.exceptions.ConnectionError: UnixHTTPConnectionPool(host='localhost', port=None): Max retries exceeded with url: /v1.30/containers/create (Caused by <class 'socket.error'>: [Errno 13] Permission denied) - DevanDev
我该如何将用户添加到Docker组?# - DevanDev
https://askubuntu.com/questions/79565/how-to-add-existing-user-to-an-existing-group - Christian Berendt
在Windows上使用pip install docker安装后,出现了错误:docker.errors.DockerException: Install pypiwin32 package to enable npipe:// support。尝试安装pipwin32并没有帮助。解决方法是在运行Python 3.7的conda环境中运行此代码。然后它也可以在Windows上工作。 - shehryar
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接