如何运行docker容器,如果尚未运行
我需要运行一个docker容器只有当它还没有运行。 给出这个命令。 我怎样才能运行它只有当它不存在。
docker run --name nginx -d nginx
我接受任何脚本或语言。
使用filter来检查某个特定名称的容器是否存在:
(请参阅docker ps Filterring )
#!/bin/bash name='nginx' [[ $(docker ps -f "name=$name" --format '{{.Names}}') == $name ]] || docker run --name nginx -d nginx
docker run
只有在第一部分是假的时才会执行。
我肯定会build议寻找docker工作者和docker-compose up
。
由于你的问题是运行,我会简化VonC的答案
docker start nginx || docker run --name nginx -d nginx
如果容器已经在运行,docker start将返回0,因此不会调用运行。 如果容器EXISTS但没有运行,启动将启动它,否则它会创build它。
VonC答案中缺less存在但停止的部分。
如果有一个名称相同的容器,Docker将永远不会运行新的容器。 所以指定--name
是你所需要的:
docker run --name nginx -d nginx
再次运行:
docker run --name nginx -d nginx Error response from daemon: Conflict. The name "nginx" is already in use by container f9e5798a82e0. You have to delete (or rename) that container to be able to reuse that name.
那么如果你打开任何语言,我build议使用docker-compose来完成这个任务。 安装完成后,使用以下内容创build一个名为docker-compose.yml的文件:
version: '2' services: nginx: image: 'nginx'
然后使用:
docker-compose up - d
它会一直检查容器是否已经在运行。 如果容器不存在,它将创build并运行。 如果容器停止,就运行它。
最好的情况是,如果您更改了docker-compose.yml或者提取新版本的图像,它将自动重新创build保存所有卷的容器,即使是未命名的卷也是如此。
问候