Skip to content

Instantly share code, notes, and snippets.

@shenqihui
Created August 30, 2022 08:48
Show Gist options
  • Save shenqihui/9edbea71d1c3d30b6df86146a162626e to your computer and use it in GitHub Desktop.
Save shenqihui/9edbea71d1c3d30b6df86146a162626e to your computer and use it in GitHub Desktop.
同一宿主机不同docker-compose组使用外部ip

依赖

docker >= 20 docker-compose >= 2

如何运行:

创建虚拟网卡

注意下面的要针对自己改动: 如 192.168.12 改成自己网段 eth0 改成自己的网卡名字。 docker_ipvlan 这个不变,这个是用来docker容器网络使用的,详情查看 docker-compose 文件里面的 networks 后的那个网络模式

docker network create -d ipvlan \
    --subnet=192.168.12.0/24 \
    --gateway=192.168.12.1 \
    -o ipvlan_mode=l2 \
    -o parent=eth0 docker_ipvlan

(假如已经创建的,会创建不成功,需要看下是不是一样的设置。) (参考指令: docker network ls)

配置ip

复制 .env.example 为 .env ,改成一个尚未使用的ip

注意这里看自己的项目,可有可无,并不是这个功能的重点,不在这里介绍。 目前这里只设置了 HOST_IP=192.168.12.40 在 .env 里面。

运行,docker-compose up -d --build

容器网络解析

default: 每个容器都有 default 网络 (默认 bridge ),方便容器组自动通信 docker_ipvlan: 用于分配外网 ip ,同局域网下其他机器访问该网络下面的容器。

version: '3'
services:
php-fpm:
build: ./php
volumes:
- /etc/localtime:/etc/localtime
restart: always
networks:
default:
nginx:
build: ./nginx/
volumes:
- /var/log/nginx/:/var/log/nginx/
- /etc/localtime:/etc/localtime
restart: always
depends_on:
- go
- php-fpm
networks:
default:
docker_ipvlan:
ipv4_address: ${HOST_IP}
go:
build: ./go
volumes:
- /etc/localtime:/etc/localtime
labels:
- go
restart: always
networks:
default:
networks:
docker_ipvlan:
external: true
driver: ipvlan
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment