使用过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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。