Docker create network should ignore existing network

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?


Solution 1:

Currently there is no way to force it OR ignore it but you can get rid of this problem using shell -

docker network create --driver bridge my_local_network || true

This way whenever your build script executes, if there is no network it will create one else it will return true without any command failure so that rest of the build script can execute.

Solution 2:

Building on @AndyTriggs' answer, a neat (and correct) solution would be:

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

Solution 3:

You can first test for the existence of the network, and create it if it doesn't exist. For example:

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

Replace the echo with your network create command:

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

Solution 4:

You can do it also in this way:

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

Advantages:

  1. Regexp prevents omitting network creation in case of existing network with similar name.
  2. Errors in docker commands will not pass silently.

In fact it is very similar to the solution provided by @yktoo in comment under the answer of @Andy Triggs.