美文网首页
Docker 添加容器到一个网络

Docker 添加容器到一个网络

作者: HoneyMoose | 来源:发表于2020-12-03 06:31 被阅读0次

    要创建一个安全并且能够协同运行的 Web 应用程序,你需要创建一个网络。

    通过网络,在默认情况下为容器提供了完全独立的环境。在你第一次运行一个容器的时候,你可以将容器添加到一个网络中。

    例如,我们希望运行一个容器来运行 PostgreSQL 数据库,并且传递--net=my_bridge标记来到你新网络的连接中,可以运行下面的命令:

    $ docker run -d --net=my_bridge --name db training/postgres

    如果你检查你的my_bridge,你可以看到已经有一个容器被添加(attached)上去了。

    你也可以检查你的容器来查看连接在哪里:

    $ docker inspect --format='{{json .NetworkSettings.Networks}}'db{"my_bridge":{"NetworkID":"7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99","EndpointID":"508b170d56b2ac9e4ef86694b0a76a22dd3df1983404f7321da5649645bf7043","Gateway":"10.0.0.1","IPAddress":"10.0.0.254","IPPrefixLen":24,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:02"}}

    现在,你可以使用你熟悉的命令来启动一个 Web 应用程序了。这次不需要指定一个网络。

    $ docker run -d --name web training/webapp python app.py

    bridge2720×448 26.8 KB

    你的web应用运行在哪个网络下呢?可以检查应用来确定这个应用运行在默认的桥接(bridge)网络。

    $ docker inspect --format='{{json .NetworkSettings.Networks}}'web{"bridge":{"NetworkID":"7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812","EndpointID":"508b170d56b2ac9e4ef86694b0a76a22dd3df1983404f7321da5649645bf7043","Gateway":"172.17.0.1","IPAddress":"10.0.0.2","IPPrefixLen":24,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:02"}}

    然后获得你web应用的 IP 地址。

    $ docker inspect --format='{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web

    172.17.0.2

    现在,可以打开一个 shell 来运行db容器:

    $ docker container exec -it db bashroot@a205f0dd33b2:/# ping 172.17.0.2ping172.17.0.2PING172.17.0.2(172.17.0.2)56(84) bytes of data.^C---172.17.0.2ping statistics ---44packets transmitted,0received,100% packet loss, time43185ms

    在过一段时间后,可以使用CTRL-C来终止ping命令,请注意 ping 显示终止了。

    这是因为这个 2 个容器运行在不同的网络中,你可以使用exit命令来关闭容器进行修复。

    Docker 网络运行你附件一个容器到多个你愿意的网络上。你甚至可以添加到一个正在运行的容器上。

    运行下面的命令,将web应用添加到my_bridge网络上。

    $ docker network connect my_bridge web

    打开 shell 然后再次进入db应用,然后尝试使用 ping 命令。这次你可以仅仅使用容器的名字web就可以了,而不需要使用 IP 地址。

    $ docker container exec -it db bashroot@a205f0dd33b2:/# ping webPINGweb(10.0.0.2) 56(84) bytes of data.64 bytesfromweb(10.0.0.2): icmp_seq=1ttl=64time=0.095ms64bytesfromweb(10.0.0.2): icmp_seq=2ttl=64time=0.060ms64bytesfromweb(10.0.0.2): icmp_seq=3ttl=64time=0.066ms^C--- web ping statistics ---3packets transmitted,3received,0% packet loss, time2000msrtt min/avg/max/mdev =0.060/0.073/0.095/0.018ms

    命令ping显示连接到了一个不同的 IP 地址,这个在my_bridge上的 IP 地址与bridge网络上的 IP 地址是不同的。

    相关文章

      网友评论

          本文标题:Docker 添加容器到一个网络

          本文链接:https://www.haomeiwen.com/subject/qespwktx.html