- docker有一个连接系统允许将多个容器连接在一起,共享连接信息;docker连接会创建一个父子关系,父容器可以看到子容器的信息。
-
docker network create -d bridge test-net
-
Usage: docker network COMMAND Manage networks Commands: connect Connect a container to a network create Create a network disconnect Disconnect a container from a network inspect Display detailed information on one or more networks ls List networks prune Remove all unused networks rm Remove one or more networks
-
$ docker network create -d bridge test-net >>> 598cb6250de10af201237d18f02ed0c2bb16726b8a354d6a8403c2e4e89677c4 $ docker network ls >>> NETWORK ID NAME DRIVER SCOPE 4d8c64f6d1ba bridge bridge local b7ac05c0789e host host local d236850078af none null local 598cb6250de1 test-net bridge local
-
开启两个Ubuntu容器:
$ docker run -itd --name test-2 ubuntu:v1 /bin/bash >>> 4fa527e28fb50cdb8067cc6498ce8c2c4462f7d24c589180f1587149528ead0e $ docker run -itd --name test-1 ubuntu:v1 /bin/bash >>> 03696463fad0a8c2130ecf0a60324a0309f94dc61b6038ba737b3c6de35963ad
-
测试容器test-1 和容器 test-2直接网络是否联通:
$ docker ps >>> ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 03696463fad0 ubuntu:v1 "/bin/bash" 54 seconds ago Up 53 seconds test-1 4fa527e28fb5 ubuntu:v1 "/bin/bash" 57 seconds ago Up 56 seconds test-2 $ docker exec -it test-1 /bin/bash root@03696463fad0:/ ping test-2 >>> ping: test-2: Name or service not known
test-1和test-2目前没有网络连接。
-
将两个容器加入网络:
docker network connect NETWORKID CONTAINER_ID
$ docker ps >>> ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 03696463fad0 ubuntu:v1 "/bin/bash" 3 minutes ago Up 3 minutes test-1 4fa527e28fb5 ubuntu:v1 "/bin/bash" 3 minutes ago Up 3 minutes test-2 $ docker network ls >>> NETWORK ID NAME DRIVER SCOPE 5ec41a2e74f5 test-net bridge local # 将容器test-1 test-2加入网络 $ docker network connect 5ec41a2e74f5 03696463fad0 $ docker network connect 5ec41a2e74f5 4fa527e28fb5 # 进入容器test-1并ping test-2 $ docker exec -it test-1 /bin/bash root@03696463fad0:/ ping test-2 >>> PING test-2 (172.18.0.3) 56(84) bytes of data. 64 bytes from test-2.test-net (172.18.0.3): icmp_seq=1 ttl=64 time=0.091 ms 64 bytes from test-2.test-net (172.18.0.3): icmp_seq=2 ttl=64 time=0.069 ms 64 bytes from test-2.test-net (172.18.0.3): icmp_seq=3 ttl=64 time=0.074 ms
在容器test-1里面可以ping通test-2,证明两个容器现在处于同一网络之中。
-
修改宿主机(docker安装的那台机器)的/etc/docker/daemon.json文件,在文件中加入:
{"dns":[114.114.114.114, 8.8.8.8]}
配置后重启docker,再启动的所有容器的DNS会自动配置为114.114.114.114和8.8.8.8。
-
查看容器的dns是否修改成功:
$ docker run -it --rm ubuntu cat etc/resolv.conf
–rm的含义是退出容器后自动清理容器内部的文件结构。
-
在容器启动的命令中加入DNS信息:
$ docker run -it --rm -h=host_test --dns=114.114.114.114 --dns-search=test.com ubuntu
-h HOST_NAME或者–h=HOST_NAME 指定容器的host名称
–dns: 添加DNS服务器到容器的/etc/resolv.conf中,让容器用这个服务器来解析所有不在/etc/hosts中的主机名
–dns-search:设定容器的搜索域,当搜索域是test.con时,搜索一个名为host的主机时,DNS不仅搜索host,也会搜索 host.test.com
-
在启动容器时如果没有指定 --dns --dns-search,容器启动时会使用宿主机/etc/resolv.conf里面的配置来配置容器的DNS。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)