0
点赞
收藏
分享

微信扫一扫

docker - 多个docker通过非IP方式连接方式

捌柒陆壹 2023-10-08 阅读 47

二、多个docker通过非IP方式连接方式:

有一个web容器、一个mysql容器,web服务器需要访问mysql容器,从上面的方式,可以知道使用IP来访问.

局限:

①. 每次部署或启动,相同容器的IP会发生变化
②. 需要先知道ip才能进行通信

1. link(官方已经废弃,原理可参考):

采用link来为mysql容器起个name,通过name + 端口就可以访问,IP变化了也没关系.类似添加了一个dns的记录.

# 创建容器test1
$ docker run -d --name test1 nginx
# 创建容器test2并link到test1
$ docker run -d --name test2 --link test1 nginx
# 进入test2容器,ping test1是通的
$ docker exec -it test2 /bin/sh
$ ping test1

原理:

①. test2 link到test就是修改了test2自己的host文件和设置了环境变量而已.
②. 所以test2能ping通test1,但是test1无法ping通test2.
③. --link后面是访问的容器名字.

2. 创建自定义的网桥:

①. 创建一个叫做my-bridge的网桥,使用的连接方式是bridge
   $ docker network create -d bridge my-bridge
②. 查看刚刚创建的my-bridge网络
   $ docker network ls
   NETWORK ID     NAME        DRIVER    SCOPE
   ......
   8217ca7f6526   my-bridge   bridge    local
   $ brctl show
   bridge name      bridge id          STP enabled    interfaces
   br-8217ca7f6526  8000.02420d2e2b15   no
   # br-后面跟的是创建新的bridge的network id

③. 创建容器test3并添加到my-bridge网络中 
   $ docker run --name test3 --network my-bridge busybox /bin/sh -c "while true; do sleep 3600; done"

④. 查看宿主机的网络环境,多出一个端口:
   $ ip a
   7: veth9902000@if6 : <BROADCAST,MULTICAST,UP,LOWER_UP>
  
⑤. 查看已有网桥:
   $ brctl show
   bridge name      bridge id   STP enabled  interfaces
   br-8217ca7f6526  8000.02420d2e2b15  no    veth9902000

⑥. 查看网络详情:
   $ docker inspect 8217ca7f6526(或docker network inspect 8217ca7f6526)
    "Driver": "bridge",
    "Containers": {
      "367c66d2abf9afa477......": {
      "Name": "test3",
      "IPv4Address": "172.18.0.2/16",
      }
    }
    a. 也可以使用命令docker network inspect my-bridge(网桥名称)
    b. 内网IP为172.18.0.2(之前没指定都是默认的172.17.xx.xx,即默认的docker0).

举报

相关推荐

0 条评论