使用 Docker 搭建了一些服务,每一次新增服务,都需要在 nginx 的容器做一些 *** 作。
于是乎,就探究探究能不能直接通过 容器IP+端口 来访问容器中的服务。
环境WindowsHyper-VUbuntu 20.04(虚拟机)dockerdocker-compose 准备工作
若容器是在虚拟机内,则需要先固定虚拟机的 IP。
关于 Hyper-V 的虚拟机 IP 固定 *** 作可以参考 Hyper-V固定虚拟机IP;
docker-compose.yml 编写注意点为了能够保证每次容器获取到的 IP 都是固定的,所以需要定义网段和为每个容器指定 IP
demo 如下:
version: "3" services: mysql: image: mysql:8 command: --default-authentication-plugin=mysql_native_password environment: - MYSQL_PASSWORD=123456 - MYSQL_ROOT_PASSWORD=123456 container_name: mysql restart: always networks: default: ipv4_address: 172.19.0.1 redis: image: redis:6.2.2-alpine ports: - "6379:6379" volumes: - ./redis/data:/data container_name: redis restart: always networks: default: ipv4_address: 172.19.0.2 php56: image: php:5.6-fpm-alpine environment: TZ : 'Asia/Shanghai' restart: always container_name: php5.6 networks: default: ipv4_address: 172.19.0.56 php73: image: php:7.3.18-fpm-alpine environment: TZ : 'Asia/Shanghai' restart: always container_name: php5.6 networks: default: ipv4_address: 172.19.0.73 networks: default: ipam: config: - subnet: 172.19.0.0/16
这个时候,若是 Linux 环境,是可以直接通过 IP 访问容器了。
容器IP通过虚拟机路由到宿主机 虚拟机开启路由转发sudo sed -i 's!#net.ipv4.ip_forward=1!net.ipv4.ip_forward=1!g' /etc/sysctl.conf sudo sysctl -p /etc/sysctl.conf sudo iptables -P FORWARD ACCEPTwindows开启路由转发
- 获取虚拟机的IP
ifconfig eth0
结果如下(192.168.137.128):
eth0: flags=4163mtu 1500 inet 192.168.137.128 netmask 255.255.255.0 broadcast 192.168.137.255 inet6 fe80::215:5dff:fe2a:9b0a prefixlen 64 scopeid 0x20 ether 00:15:5d:2a:9b:0a txqueuelen 1000 (Ethernet) RX packets 812947 bytes 916704076 (916.7 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 481002 bytes 77532801 (77.5 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- windows上通过 powershell 查看路由表
route print 172.19.0.0
结果如下(路由表没数据):
=========================================================================== 接口列表 12...00 15 5d 2a 9b 09 ......Hyper-V Virtual Ethernet Adapter #2 14...e4 54 e8 c4 ad fc ......Realtek PCIe GbE Family Controller 1...........................Software Loopback Interface 1 25...00 15 5d 6c 85 b7 ......Hyper-V Virtual Ethernet Adapter =========================================================================== IPv4 路由表 =========================================================================== 活动路由: 无 永久路由: 无 IPv6 路由表 =========================================================================== 活动路由: 无 永久路由: 无
- windows使用管理员权限打开 powershell 添加路由表
# 下面的命令是添加永久路由的,若不需要添加永久路由,可以去掉 -p # 172.19.0.0 是虚拟机中Docker的IP段 # 255.255.255.0 写死就好 # 192.168.137.128 是虚拟机的IP route add -p 172.19.0.0 mask 255.255.255.0 192.168.137.128
- windows再次查看路由表
=========================================================================== 接口列表 12...00 15 5d 2a 9b 09 ......Hyper-V Virtual Ethernet Adapter #2 14...e4 54 e8 c4 ad fc ......Realtek PCIe GbE Family Controller 1...........................Software Loopback Interface 1 25...00 15 5d 6c 85 b7 ......Hyper-V Virtual Ethernet Adapter =========================================================================== IPv4 路由表 =========================================================================== 活动路由: 网络目标 网络掩码 网关 接口 跃点数 172.19.0.0 255.255.255.0 192.168.137.128 192.168.137.1 16 =========================================================================== 永久路由: 网络地址 网络掩码 网关地址 跃点数 172.19.0.0 255.255.255.0 192.168.137.128 1 =========================================================================== IPv6 路由表 =========================================================================== 活动路由: 无 永久路由: 无
完成
最后再也不用担心新增/修改服务时,影响其他服务了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)