暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Windows如何直接访问虚拟机内的容器?

码上闯天下 2022-05-07
2216

使用过Docker的人都知道,如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主机(端口映射),即 docker run 创建容器的时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[映射端口]来访问容器。

1.1.创建运行容器:

    root@debian:~# docker run -d -p 8088:80 nginx:latest
    a2557aa772bf3331a28b0bfaf9109efc72d4c1d2a742810b1b0ec9b631983d9b

    1.2. 查看宿主机IP:

      root@debian:~# ip addr show ens33
      2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
      link/ether 00:0c:29:d3:14:33 brd ff:ff:ff:ff:ff:ff
      inet 192.168.253.128/24 brd 192.168.253.255 scope global dynamic ens33
      valid_lft 1430sec preferred_lft 1430sec
      inet6 fe80::20c:29ff:fed3:1433/64 scope link
      valid_lft forever preferred_lft forever

      1.3. 浏览器访问:[宿主机IP]:[映射端口]

        http://192.168.253.128:8088/

        可以看到通过[宿主机IP]:[映射端口]可以访问得到容器的!

        那么我们可以通过使用[容器IP]:[容器端口]访问容器吗?

        1.4. 查看容器IP:

          root@debian:~# docker ps
          CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
          a2557aa772bf   nginx:latest   "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   0.0.0.0:8088->80/tcp, :::8088->80/tcp   gifted_cohen
          root@debian:~# docker inspect --format='{{.NetworkSettings.Networks.bridge.IPAddress}}' a2557aa772bf
          172.17.0.2

          1.5. 浏览器访问:[容器IP]:[容器端口]

            http://172.17.0.2:80

            结果是访问失败!

            那么我们怎么可以通过使用[容器IP]:[容器端口]访问容器呢?

            2.1. 我们可以创建一个自定义网络:

              root@debian:~# docker network create --driver bridge --subnet 172.168.0.0/16 --gateway 172.168.0.1 nettest
              009b05d55ba5f64f34b03280edaddf871a296a28397e2fadf2701ce95f78188a

              2.2. 指定IP方式创建运行容器:

                # -P :随机映射一个 49000~49900 的端口到内部容器开放的网络端口
                root@debian:~# docker run --net nettest --ip 172.168.0.120 -P -d nginx:latest
                e1e207e264df077f559297bf5a81cbbaa4482f4803b2d3d842e020314f01af22

                2.3. 可查看容器IP:

                  root@debian:~# docker ps
                  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
                  e1e207e264df nginx:latest "/docker-entrypoint.…" 26 seconds ago Up 25 seconds 0.0.0.0:49154->80/tcp, :::49154->80/tcp sad_galileo
                  a2557aa772bf nginx:latest "/docker-entrypoint.…" 24 hours ago Up 24 hours 0.0.0.0:8088->80/tcp, :::8088->80/tcp gifted_cohen
                  root@debian:~# docker inspect --format='{{.NetworkSettings.Networks.nettest.IPAddress}}' e1e207e264df
                  172.168.0.120

                  2.4. Windows上管理员身份执行以下cmd命令:

                    C:\Windows\system32>route add 172.168.0.0 mask 255.255.0.0 192.168.253.128
                    操作完成!

                    格式:route add 网段地址 mask 子网掩码 网关地址

                    • 网段地址:对应2.1步填写

                    • 子网掩码:对应网段地址填写

                    • 网关地址:对应1.2步填写

                    该命令目的是添加路由,可以实现路由转发数据到虚拟机里,进而访问docker部署的应用。

                    2.5. 浏览器访问[容器IP]:[容器端口]

                      http://172.168.0.120:80/

                      可见我们实现了可以通过使用[容器IP]:[容器端口]访问容器了。

                      2.6. 再试试浏览器访问:[宿主机IP]:[映射端口]

                        http://192.168.253.128:49154/

                        可见也可以通过[宿主机IP]:[映射端口]访问得到容器。


                        以上就是在Windows上直接访问虚拟机上的容器两种方式!一种是通过[宿主机IP]:[映射端口]方式访问;一种是通过[容器IP]:[容器端口]方式访问。


                        文章转载自码上闯天下,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                        评论