docker网络基本知识
默认网络
# 查看网络
docker network ls
bridge、none、host这 3 个网络包含在 Docker 实现中。运行一个容器时,可以使用 the –net标志指定您希望在哪个网络上运行该容器。您仍然可以使用这 3 个网络。
- bridge 网络表示所有 Docker 安装中都存在的 docker0 网络。除非使用 docker run –net=选项另行指定,否则 Docker 守护进程默认情况下会将容器连接到此网络。在主机上使用 ifconfig命令,可以看到此网桥是主机的网络堆栈的一部分。
- none 网络在一个特定于容器的网络堆栈上添加了一个容器。该容器缺少网络接口。
- host 网络在主机网络堆栈上添加一个容器。您可以发现,容器中的网络配置与主机相同。
自定义网络
创建网络
docker network create --driver=bridge --subnet=172.18.1.0/16 bridge_test
查看新建网络的信息
docker network inspect bridge_test
启动容器连接到新建网络 bridge_test
docker run -it --name mongo_test -net=bridge_test mongo:3.4 /bin/bash
再次查看网络信息docker network ls
可以看到挂载的容器
动态的讲容器挂载到某网络上
docker run -itd --name test1 mongo:3.4
# 挂载
docker network connect bridge_test test1
# 查看
docker network inspect bridge_test
遇到的报错信息
网络被占用
Cannot start service rs_shard_server2: b'endpoint with name rs_shard_server2 already exists in network mongocluster_default'
利用docker-compose启动的容器 使用 docker rm 命令删除后仍然会被占用, 需要手动清理
解决办法
# 删除容器
docker rm -f <容器名>
# 清理网络占用
docker network disconnect --force <网络模式> <容器名>
# 查看网络信息
docker network inspect <网络模式>
docker-compose 加入已存在的网络
docker-compose.yaml
version: '2'
networks:
mongocluster_default:
external: true
services:
rs_shard_server2:
image: mongo:3.4
command: mongod -f /etc/mongod/mongod.conf --directoryperdb --shardsvr --replSet "rs-shard2-server"
networks:
- "mongocluster_default"
volumes:
-/vol/key.file:/data/mongodb/key.file
-/vol/shard2/config:/etc/mongod
- /vol/shard2/db:/data/db
ports:
- "27018:27018"
restart:
always
container_name:
rs_shard_server2
ulimits:
nofile:
soft: 300000
hard: 300000
若出现以下报错
Service "rs_shard_server2" uses an undefined network "mongocluster_default"
请确在services同级声明一下外部网络
networks:
mongocluster_default:
external: true