docker踩坑记录:docker容器创建doris容器间无法通讯问题

背景:

开发大数据平台,使用doris作为数据仓储,使用docker做集群部署,先进行开发环境搭建,环境为BE1;FE1,原来使用官方例子,但是官方例子是创建了一个bridge使用172.20.80.0/24通讯,这样正常来说,使用fe去操作doris是没有问题的,但是我们现在要使用flink进行相关的数据同步清洗,采用flink-cdc进行同步操作。

出现问题

当使用flink-cdc时,会请求fe,使用fe返回的注册的be地址,但是be一般是放在内网使用,无法在外网请求,flink-cdc反其道而行之,没办法,只能使用其他办法了,当你读完docker官方的网络配置时,你就会知道除了4种默认网络模式以外,还有两种特殊模式:其中的一种正是我们想要的模式,可以将容器完全独立出来。
docker踩坑记录:docker容器创建doris容器间无法通讯问题_第1张图片

开始解决

//检查是否可用
modprobe macvlan
lsmod | grep macvlan
//创建docker网络
//解释
docker network create -d macvlan --subnet=[网段] --gateway=[网关] -o parent=[网卡] macvlan
//实际例子
docker network create -d macvlan --subnet=192.168.157.1/24 --gateway=192.168.157.1 -o parent=enp2s0 doris_macvlan
//创建docker-compose
version: '3'
services:
  docker-fe:
    image: "apache/doris:1.2.1-fe-x86_64"
    container_name: "doris-fe"
    hostname: "fe"
    environment:
      - FE_SERVERS=fe1:192.168.157.200:9010
      - FE_ID=1
    ports:
      - 8030:8030
      - 9030:9030
      - 9010:9010
    volumes:
      - ./fe/doris-meta:/opt/apache-doris/fe/doris-meta
      - ./fe/conf:/opt/apache-doris/fe/conf
      - ./fe/log:/opt/apache-doris/fe/log
    networks:
      doris_macvlan:
        ipv4_address: 192.168.157.200
  docker-be:
    image: "apache/doris:1.2.1-be-x86_64"
    container_name: "doris-be"
    hostname: "be"
    depends_on:
      - docker-fe
    environment:
      - FE_SERVERS=fe1:192.168.157.200:9010
      - BE_ADDR=192.168.157.201:9050
    ports:
      - 8040:8040
      - 9050:9050
    volumes:
      - ./be/storage:/opt/apache-doris/be/storage
      - ./be/conf:/opt/apache-doris/be/conf
      - ./be/script:/docker-entrypoint-initdb.d
      - ./be/log:/opt/apache-doris/be/log
    networks:
      doris_macvlan:
        ipv4_address: 192.168.157.201
networks:
  doris_macvlan:
    external: true
    name: doris_macvlan

注意:其中的networks部分,我们使用的doris_macvlan(也就是我们刚刚创建的网卡)

其中查看官方文档的时候,发现官方给的例子是docker run运行,我想使用docker-compose运行,所以找到了如下小工具:

//安装
npm install composerize -g
//使用
composerize docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
//输出
version: '3.3'
services:
    portainer:
        ports:
            - '9000:9000'
        volumes:
            - '/var/run/docker.sock:/var/run/docker.sock'
        image: portainer/portainer

flink-cdc参考:https://github.com/apache/doris-flink-connector
docker网络参考:https://docs.docker.com/network/

你可能感兴趣的:(docker,容器,运维)