运行Docker容器进程而不必担心死容器问题的脚本

rundocker的Python项目详细描述


Rundocker

运行Docker容器进程的脚本

我们在这里解决的问题

由于docker 0.6,您实际上可以像正常进程一样运行docker container

` docker run --rm foobar `

按ctrl+c时,docker client会将int信号代理给docker容器,这样容器就会终止。但是,在许多情况下,Docker容器将无法正确关闭,甚至Docker客户端进程也将停止。例如,当您试图用一个使用过的端口运行一个容器时,run命令将失败,但是不知何故,docker容器不会被删除,它会导致以下run命令失败

` 2014/07/27 03:24:45 Error response from daemon: Cannot start container 08b25a41e30be78410a2556ffe01e720ff0d7bd512a53e8a44d7bceb8d3cf83e: Bind for 172.17.42.1:5050 failed: port is already allocated 2014/07/27 03:24:46 Error response from daemon: Conflict, The name foobar is already assigned to 08b25a41e30b. You have to delete (or rename) that container to be able to assign foobar to a container again. 2014/07/27 03:24:48 Error response from daemon: Conflict, The name foobar is already assigned to 08b25a41e30b. You have to delete (or rename) that container to be able to assign foobar to a container again. .... `

有一个[issue 7245](https://github.com/docker/docker/issues/7245)描述了这个问题。如果增加了新功能,我想我们可以放弃这个项目。

安装

您可以通过

` pip install rundocker `

因为它只有[一个python脚本文件](https://github.com/victorlin/rundocker/blob/master/rundocker/__main__.py),所以实际上可以将脚本复制到一个文件并使其可执行。

用法

使用RunDocker运行Docker,并使用您通常使用的名称

` sudo rundocker --rm--name="foobar" eggs/spam `

在许多情况下,即使Docker运行进程也无法正确删除容器 已终止。当你试图运行同名的容器时, 它会一直告诉你已经有一个同名的容器了。 这很烦人,而且会破坏自动部署。 为了解决这个问题,您可能需要添加--force-rm 争论。它将强制删除具有相同名称的现有容器。 它在RunDocker运行新容器之前运行。例如:

` sudo rundocker --rm--force-rm--name="foobar" eggs/spam `

工作原理

如果存在死箱,脚本将查看现有的DOCKER容器。 用同样的名字,它会为你移除它。但是,如果存在 容器仍在运行,将引发错误。

当脚本接收到int信号时,它将停止容器。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Intellij和Eclipse无法找到库工件   java Mapbox Android Symbolayer重置筛选器   java如何在顶部显示特定的recyclerview项?   java如何在Hibernate中使用@Qualifier   我想计算特定文本webdriver java在多个页面上可用的HTML表中的数据   java捕获Spring MVC REST服务抛出的Jersey REST客户端的异常   java Hibernate flush()影响事务   密钥绑定Java密钥绑定   sonarqube java,sonar,圈复杂度   使用3DES在Java中加密,在SQL Oracle中解密   regex正则表达式在regex101上工作。com,但不是prod   JAVAsql。SQLException:ORA00600:内部错误代码,参数:[12811],[93233]   java H2数据库存储在哪里?   java如何避免在使用Jackson时从JSON字符串反序列化空JSON数组元素