V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leegoo
V2EX  ›  Docker

大佬们 ,问下 docker-compose scale 水平扩容的一个问题

  •  
  •   leegoo · 2019-07-07 13:07:36 +08:00 · 6175 次点击
    这是一个创建于 1990 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的docker-compose.yml 配置文件如下:

    version: "2"
    
    services:
      spring-cloud-eureka-server01:
        #image: java 指定镜像名或者 id,没有就会下载
        image: leegoo0820/spring-cloud-eureka-server01-service:0.0.1-SNAPSHOT
        volumes:  #挂载目录
          - "/usr/tmp/data/spring-cloud-eureka-server01"
        container_name: spring-cloud-eureka-server_eureka01
        build: .
        ports:  #开放端口
          - "8761:8761"
        #links:
        #  - spring-cloud-eureka-server02:discovery
        #environment:  设置环境参数
        #  - spring.profile.active=dev
    
      spring-cloud-eureka-server02:
        #image: java 指定镜像名或者 id,没有就会下载
        image: leegoo0820/spring-cloud-eureka-server02-service:0.0.1-SNAPSHOT
        volumes:  #挂载目录
          - "/usr/tmp/data/spring-cloud-eureka-server02"
        container_name: spring-cloud-eureka-server_eureka02
        build: .
        ports:  #开放端口
          - "8762:8762"
    
      spring-cloud-eureka-client01:
        #image: java 指定镜像名或者 id,没有就会下载
        image: leegoo0820/spring-cloud-eureka-client01:0.0.1-SNAPSHOT
        volumes:  #挂载目录
          - "/usr/tmp/data/spring-cloud-eureka-client01"
        #container_name: spring-cloud-eureka-client01
        build: .
        ports:  #开放端口
          - "8846:8846"
    
    
    

    我现在想水平扩容 spring-cloud-eureka-client01 节点到三个节点,

    使用命令 docker-compose scale spring-cloud-eureka-client01=3

    但是会报错,如下所示:

    
    WARNING: The scale command is deprecated. Use the up command with the --scale flag instead.
    WARNING: The "spring-cloud-eureka-client01" service specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash.
    Starting spring-cloud-eureka_spring-cloud-eureka-client01_1 ... done
    Creating spring-cloud-eureka_spring-cloud-eureka-client01_2 ... error
    Creating spring-cloud-eureka_spring-cloud-eureka-client01_3 ... error
    
    ERROR: for spring-cloud-eureka_spring-cloud-eureka-client01_2  Cannot start service spring-cloud-eureka-client01: b'driver failed programming external connectivity on endpoint spring-cloud-eureka_spring-cloud-eureka-client01_2 (f820f286717a14e11745016963b76ab44622ef7895b1201130129ce1524a159c): Bind for 0.0.0.0:8846 failed: port is already allocated'
    
    ERROR: for spring-cloud-eureka_spring-cloud-eureka-client01_3  Cannot start service spring-cloud-eureka-client01: b'driver failed programming external connectivity on endpoint spring-cloud-eureka_spring-cloud-eureka-client01_3 (7023830ee4f35fe85c75e2a70f276f73fec8ba949d1cfb641a3a19e12f849857): Bind for 0.0.0.0:8846 failed: port is already allocated'
    ERROR: Cannot start service spring-cloud-eureka-client01: b'driver failed programming external connectivity on endpoint spring-cloud-eureka_spring-cloud-eureka-client01_2 (f820f286717a14e11745016963b76ab44622ef7895b1201130129ce1524a159c): Bind for 0.0.0.0:8846 failed: port is already allocated'
    
    

    大概意思就是说扩容的后面几个节点都需要使用 8846 端口,但是 8846 端口已经被第一个占用了,那么我应该怎么样才能够进行扩容呢?

    3 条回复    2020-05-06 18:40:53 +08:00
    wangxiaoaer
        1
    wangxiaoaer  
       2019-07-07 13:14:18 +08:00 via Android
    再加一个负载均衡的 container,对外的端口由这个 container 影射,spring 的端口不要映射,由前面那个 container 转发。

    可以搜索一下 nginx-proxy 这个 docker 镜像。
    leegoo
        2
    leegoo  
    OP
       2019-07-07 13:22:13 +08:00
    @wangxiaoaer 好,谢谢 。我试试
    godsoul
        3
    godsoul  
       2020-05-06 18:40:53 +08:00
    你端口被占用了,你要水平扩容的端口暴露,这么写 "8761-8800:8761" 这样他会自动找可以用的端口暴露的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5097 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 07:00 · PVG 15:00 · LAX 23:00 · JFK 02:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.