添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

若容器是在虚拟机内,则需要先固定虚拟机的 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<UP,BROADCAST,RUNNING,MULTICAST>  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<link>
            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 路由表
    ===========================================================================
    活动路由:
    永久路由:
    

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

    分类:
    后端
    标签: