首页 > 解决方案 > 如果不存在,Docker 运行命令创建容器

问题描述

docker 新手,我正在尝试在 TFS / azure devops 构建过程中从 docker hub 运行“selenoid”容器。第一次执行有效,但在接下来的执行中,我收到了一个冲突错误(容器已经存在同名的容器)。在这里阅读了几篇文章后,我了解到我有两个解决方案:

1/ 保留运行命令,但在该容器上执行“rm”命令,然后再次运行它。

2/ 确定容器是否已经存在并使用“start”进行下一次构建运行。

对于第一个解决方案,我想每次删除/重新创建该容器并不是很高效?我想到了第二个,但是制作一个检查容器是否存在的脚本,然后使用启动或运行也有点复杂。

那么是否有一个简单的“运行”选项/标志可以改变“运行”命令的行为,以便它仅在需要时创建容器然后启动它?

另外,我本可以制作一个脚本来完成这项工作,但我更愿意在这里问它,因为也许我不理解使用容器的正确方法(如果我是唯一一个要求该选项的人,我可能错过了某物...)

标签: docker

解决方案


Docker 容器本来就是短暂的。您将它们旋转起来,它们会做自己的事情,它们会死去,它们会被移除(并且不消耗任何资源)。

除非容器正在初始化数据库或其他需要很长时间才能启动的东西,或者您需要维护状态(没有卷挂载),否则最简单的做法就是使用--rm标志运行它,这样当它完成时它会自行移除。

docker run --rm --name mycontainer image:tag

当然,正如上面已经评论过的。如果您需要在容器运行时执行它,您通常只会费心命名容器。由于它似乎只是运行和退出,这可能是不必要的。

当然,这并不是说您不能拥有长时间运行的容器。但是如果他们自然退出,那么他们通常应该被清理干净,而不是跳过箍重新开始同样的一个。


推荐阅读