Docker创建网络应该忽略现有网络

时间:2018-02-06 12:49:44

标签: docker dockerfile

我的docker容器在本地网络中运行,名为my_local_network。为了确保网络存在,每个构建脚本都以:

开头
docker network create --driver bridge my_local_network

这很好用。如果网络不存在,则创建它,如果没有,则不会发生任何事情。除了错误消息:

Error response from daemon: network with name my_local_network already exists

如果不存在,有没有办法告诉docker只创建网络?

6 个答案:

答案 0 :(得分:19)

目前没有办法强制它或忽略它但你可以使用shell -

摆脱这个问题

docker network create --driver bridge my_local_network || true

这样,无论何时构建脚本执行,如果没有网络,它将创建一个其他的,它将返回true而不会发生任何命令失败,以便构建脚本的其余部分可以执行。

答案 1 :(得分:9)

以@AndyTriggs的答案为基础,一个简洁(正确)的解决方案是:

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

答案 2 :(得分:4)

您可以首先测试网络的存在,如果不存在则创建它。例如:

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

答案 3 :(得分:2)

您也可以通过以下方式做到这一点:

Integer[] complexFunction(int dx_, int dy_){

     Integer[] out = new Integer[N * N];

     for (Integer y = 0; y < N; y++) {
        for (Integer x = 0; x < N; x++) {

          out[x + y * N] = matrix[(x + dx_) % w][(y + dy_) % h];

        }
     }
     return out; 

}

优势:

  1. 正则表达式可防止在名称相似的现有网络中省略网络创建。
  2. 泊坞窗命令中的错误不会静默传递。

实际上,它与@yktoo在@Andy Triggs的回答下提供评论的解决方案非常相似。

答案 4 :(得分:2)

您可以像下面那样简单地使用 grep,而不会打印出任何错误:

if [[ "$(docker network ls | grep "${networkName}")" != "" ]] ; then
    docker network rm "${networkName}"
fi

docker network create --subnet=172.10.0.0/16 "${networkName}"

在这种情况下,我假设已经创建的一个网络可以具有与我不同的子网配置。

对于您的情况将是:

if [[ "$(docker network ls | grep "${networkName}")" == "" ]] ; then
    docker network create "${networkName}"
fi

答案 5 :(得分:1)

如果可以使用PowerShell

$networkName = "some name here"

if (docker network ls | select-string $networkName -Quiet )
{
    Write-Host "$networkName already created"
} else {
    docker network create $networkName
}

在PS core 7.0.3上进行了尝试-此版本可用于Linux。