Docker create network should ignore existing network

Refresh

December 2018

Views

2.2k time

7

My docker containers are running in a local network, called my_local_network. To assure the network exists, every build script starts with:

docker network create --driver bridge my_local_network

This works fine. If the network does not exist, it is created, if not, nothing happens. Except for the error message:

Error response from daemon: network with name my_local_network already exists

Is there a way to tell docker only to create the network if it doesn't exist?

4 answers

1

Вы можете сначала проверить существование сети, и создать его, если он не существует. Например:

docker network ls|grep my_local_network > /dev/null || echo "network does not exist"

Заменить эхо с сетью команды создания:

docker network ls|grep my_local_network > /dev/null || docker network create --driver bridge my_local_network
9

В настоящее время нет никакого способа, чтобы заставить его или игнорировать его, но вы можете избавиться от этой проблемы, используя оболочку -

docker network create --driver bridge my_local_network || true

Таким образом, всякий раз, когда ваш сценарий сборки выполняется, если нет сети будет создавать один еще он возвращает истину без какого-либо сбоя команды, так что остальная часть сценария сборки может выполнять.

1

Вы можете сделать это также таким образом:

NETWORK_NAME=my_local_network
if [ -z $(docker network ls --filter name=^${NETWORK_NAME}$ --format="{{ .Name }}") ] ; then 
     docker network create ${NETWORK_NAME} ; 
fi

Преимущества:

  1. Regexp предотвращает опуская создание сети в случае существующей сети с одноименным названием.
  2. Ошибки в командах докеров не будет проходить молча.

На самом деле это очень похоже на решение представленной @yktoo в комментарии под ответом @Andy Triggs.

5

Опираясь на ответ @AndyTriggs', аккуратный (и правильное) решение будет:

docker network inspect my_local_network &>/dev/null || 
    docker network create --driver bridge my_local_network