Docker容器IP访问容器服务

Docker容器IP访问容器服务,第1张

Docker容器IP访问容器服务 前言

使用 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 ACCEPT
windows开启路由转发
    获取虚拟机的IP
ifconfig eth0

结果如下(192.168.137.128):

eth0: flags=4163  mtu 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 路由表
===========================================================================
活动路由:
  无
永久路由:
  无

完成

最后

再也不用担心新增/修改服务时,影响其他服务了。

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存