如何运行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保存所有卷的容器,即使是未命名的卷也是如此。

问候