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

Ann*_*aus 23 docker dockerfile

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

docker network create --driver bridge my_local_network
Run Code Online (Sandbox Code Playgroud)

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

Error response from daemon: network with name my_local_network already exists
Run Code Online (Sandbox Code Playgroud)

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

viv*_*d4v 29

目前没有办法强制它或忽略它但你可以使用shell摆脱这个问题 -

docker network create --driver bridge my_local_network || true

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

  • 如果`docker network create ...'本身失败,则有缺点,您的脚本会认为一切都很好。 (9认同)

ykt*_*too 25

基于@AndyTriggs的回答,一个简洁(和正确)的解决方案是:

docker network inspect my_local_network >/dev/null 2>&1 || \
    docker network create --driver bridge my_local_network
Run Code Online (Sandbox Code Playgroud)

  • 有人能告诉我“2>&1”部分是什么意思吗?:) (3认同)
  • 有用的变体:使用`docker network inform my_local_network --format {{.Id}} 2>/dev/null || docker network create --driverbridge my_local_network` 该命令将在每种情况下返回网络 ID。 (3认同)
  • @Sam 它是将 `stderr` 重定向到 `stdout`,即重定向到 `/dev/null`。 (2认同)

Grz*_*ien 9

你也可以这样做:

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

好处:

  1. Regexp 防止在现有网络具有相似名称的情况下省略网络创建。
  2. docker 命令中的错误不会静默传递。

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


And*_*ggs 6

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

docker network ls|grep my_local_network > /dev/null || echo "network does not exist"
Run Code Online (Sandbox Code Playgroud)

将echo替换为network create命令:

docker network ls|grep my_local_network > /dev/null || docker network create --driver bridge my_local_network
Run Code Online (Sandbox Code Playgroud)

  • `docker网络检查my_local_network> / dev / null || docker network create --driver bridge my_local_network`,无需grep。如果您有一个名为“ my_local_network_1”的网络,则您的命令也会出现异常。 (5认同)
  • 谢谢@yktoo-挺整齐的。我曾经考虑过检查,但是出于某种原因,当时还没有考虑将其重定向到/ dev / null,并且不希望有大量检查信息产生副作用。 (2认同)