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
Преимущества:
- Regexp предотвращает пропуски создания сети в случае существующей сети с похожим именем.
- Ошибки в командах докеров не будут проходить молча.
На самом деле это очень похоже на решение, предоставленное @yktoo в комментарии в ответ на @Andy Triggs.