docker - 如果不存在,Docker 运行命令创建容器
问题描述
docker 新手,我正在尝试在 TFS / azure devops 构建过程中从 docker hub 运行“selenoid”容器。第一次执行有效,但在接下来的执行中,我收到了一个冲突错误(容器已经存在同名的容器)。在这里阅读了几篇文章后,我了解到我有两个解决方案:
1/ 保留运行命令,但在该容器上执行“rm”命令,然后再次运行它。
2/ 确定容器是否已经存在并使用“start”进行下一次构建运行。
对于第一个解决方案,我想每次删除/重新创建该容器并不是很高效?我想到了第二个,但是制作一个检查容器是否存在的脚本,然后使用启动或运行也有点复杂。
那么是否有一个简单的“运行”选项/标志可以改变“运行”命令的行为,以便它仅在需要时创建容器然后启动它?
另外,我本可以制作一个脚本来完成这项工作,但我更愿意在这里问它,因为也许我不理解使用容器的正确方法(如果我是唯一一个要求该选项的人,我可能错过了某物...)
解决方案
Docker 容器本来就是短暂的。您将它们旋转起来,它们会做自己的事情,它们会死去,它们会被移除(并且不消耗任何资源)。
除非容器正在初始化数据库或其他需要很长时间才能启动的东西,或者您需要维护状态(没有卷挂载),否则最简单的做法就是使用--rm标志运行它,这样当它完成时它会自行移除。
docker run --rm --name mycontainer image:tag
当然,正如上面已经评论过的。如果您需要在容器运行时执行它,您通常只会费心命名容器。由于它似乎只是运行和退出,这可能是不必要的。
当然,这并不是说您不能拥有长时间运行的容器。但是如果他们自然退出,那么他们通常应该被清理干净,而不是跳过箍重新开始同样的一个。
推荐阅读
- c# - 从 ASP Net Web API POST 请求中删除空的 xml 标记
- python - 从包含 JSON 的列中删除字符串
- amazon-web-services - 如果我尝试使用社交登录(Google/Oauth)第二次登录,Amazon Cognito 会引发错误
- javascript - 我需要关于 facebook 插件的帮助 - reactjs 前端
- docker - 如何使 docker 容器完全不可读
- javascript - 调用外部组件初始化的调度函数
- tensorflow - 如何将 Faster R-CNN Resnet101 的冻结推理图/保存模型转换为 tflite?
- c# - 尝试将 DataGridView 行值加载到组合框时出现“超出范围异常”错误
- html - Google 不会处理内容属性值类型为 ' 的伪元素
' 作为替换元素渲染 - python - 如果值是元组并且您只有一个元组中的值,是否可以反向查找/反转字典?