我的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只创建网络?
答案 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;
}
优势:
实际上,它与@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。