2017-06-24 16 views

Odpowiedz

5

użyć filtru, aby sprawdzić, czy istnieje pojemnik o określonej nazwie:
(Patrz docker ps Filterring)

#!/bin/bash 

name='nginx' 

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

docker run zostanie wykonany tylko wtedy, gdy pierwsza część jest fałszywa.

0

Docker nigdy nie uruchomi nowego kontenera, jeśli jest kontener o tej samej nazwie. Tak określając --name jest wszystko co trzeba:

docker run --name nginx -d nginx 

Uruchom ponownie:

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. 
0

Dobrze, jeśli jesteś otwarty na dowolnym języku Polecam używanie doker-komponować dla tego zadania. Po zainstalowaniu go, utwórz plik o nazwie doker-compose.yml z tej treści:

version: '2' 
services: 
    nginx: 
    image: 'nginx' 

Następnie użyj:

docker-compose up - d 

To zawsze sprawdzić, czy pojemnik jest już uruchomiony. Jeśli kontener nie istnieje, zostanie utworzony i uruchomiony. Jeśli pojemnik jest zatrzymany, po prostu go uruchom.

Najlepszą rzeczą jest to, że jeśli zmienisz docker-compose.yml lub pobierzesz nową wersję obrazu, to automatycznie ponownie utworzysz pojemnik zachowując wszystkie woluminy, nawet te bezimienne.

Pozdrowienia

6

Zdecydowanie sugerują, patrząc na Döcker-komponować i docker-compose up jak odpowiedział powyżej.

Ponieważ pytanie jest z biegu, chciałbym uprościć odpowiedź VonC

docker start nginx || docker run --name nginx -d nginx

Jeśli pojemnik już działa, uruchom doker powróci 0 zatem nie prowadzony jest tzw. Jeśli kontener EXISTS, ale nie działa, start uruchomi go, w przeciwnym razie go utworzy.

Brakuje części "istnieje, ale zatrzymano" w odpowiedzi VonC.

Powiązane problemy