如果尚未运行,如何运行docker容器

Luk*_*101 24 docker

我只需要在尚未运行的情况下运行docker容器.鉴于此命令.如果它不存在,我将如何运行它.

docker run --name nginx -d nginx
Run Code Online (Sandbox Code Playgroud)

我对任何脚本或语言都是开放的.

Eug*_*yer 38

我肯定会建议调查docker-compose并docker-compose up按照上面的回答.

既然你的问题是运行,我会简化VonC的答案

docker run

如果容器已在运行,则docker start将返回0,因此不会调用run.如果容器EXISTS但没有运行,start将启动它,否则它会创建它.

VonC答案中缺少存在但已停止的部分.

  • 您可能希望将 start 的 stderr 定向到 dev null,这样如果容器不存在,您就不会在脚本输出中收到错误文本负载,即 `docker start nginx 2>/dev/null || docker run --name nginx -d nginx` (2认同)

Von*_*onC 19

使用过滤器检查是否存在某个名称的容器:(
请参阅docker ps Filterring)

#!/bin/bash

name='nginx'

[[ $(docker ps -f "name=$name" --format '{{.Names}}') == $name ]] ||
docker run --name "$name" -d nginx
Run Code Online (Sandbox Code Playgroud)

docker run如果第一部分是假的,才执行.


Car*_*rez 7

好吧,如果您对任何语言持开放态度,我建议使用 docker-compose 来完成此任务。安装后,创建一个名为 docker-compose.yml 的文件,其中包含以下内容:

version: '2'
services:
  nginx:
    image: 'nginx' 
Run Code Online (Sandbox Code Playgroud)

然后使用:

docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

它会始终检查容器是否已经在运行。如果容器不存在,它将创建它并运行。如果容器已停止,则只需运行它即可。

最好的事情是,如果您更改 docker-compose.yml 或拉取新版本的映像,它将自动重新创建容器,保留所有卷,甚至是未命名的卷。

问候