Docker容器互联

Docker容器互联,第1张

Docker容器互联 Docker容器互联
  • 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,证明两个容器现在处于同一网络之中。

配置DNS 修改全部容器的DNS
  • 修改宿主机(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
  • 在容器启动的命令中加入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。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5681851.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存