Docker create network следует игнорировать существующую сеть

Контейнеры для докеров работают в локальной сети, называемой my_local_network. Чтобы убедиться, что сеть существует, каждый скрипт сборки начинается с:

docker network create --driver bridge my_local_network

Это прекрасно работает. Если сеть не существует, она создается, если нет, ничего не происходит. За исключением сообщения об ошибке:

Error response from daemon: network with name my_local_network already exists

Есть ли способ сказать докеру только создать сеть, если она не существует?

Ответ 1

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

docker network create --driver bridge my_local_network || true

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

Ответ 2

Опираясь на ответ @AndyTriggs, можно найти правильное (и правильное) решение:

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

Ответ 3

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

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

Замените эхо с помощью команды create network:

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

Ответ 4

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

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.