代码之家  ›  专栏  ›  技术社区  ›  Matelutex

码头群与集装箱间的通信

  •  0
  • Matelutex  · 技术社区  · 6 年前

    我有一个非常大的问题,我挣扎了三天。

    我在远程服务器上使用docker swarm。 在同一网络NetA和stack StackA中有20个微服务。

    所有微服务都由docker compose文件生成,该文件如下所示:

    version: '3'
    
    services:
      myservice1:
        image: myImage1
        depends_on:
          - myService2
          - myService3
        ports:
          - "8081:80"
        environment:
          - TZ=Europe/Warsaw
    
    
      myservice3:
        image: myImage2
        environment:
          - profile=${MY_PROFILE}
          - TZ=Europe/Warsaw
    
    ...
    

    现在的问题是-如何添加Zipkin服务器?

    现在我的ZIpkin服务是: -在一个单独的网络ZIPN中

    我该怎么做才能通过我所有的微服务向Zipkin发送数据? spring.zipkin.base-url= http://zipkinserver_network_zipkin_server:9411/

    可能是: -容器名(比如我的zipkin服务器)-但是我使用swarm,所以容器名会动态变化? -网络名称?

    我在我的Zipkin容器中添加了一个额外的网络NetA,但它没有解决我的问题-在我的Zipkin UI中没有任何痕迹。

    请帮帮我,我花了4天时间来解决这个问题,但都没有成功。

    Zipkin工作时只有一种情况:设置Zipkin容器名称时:

    spring.zipkin.base-url=http://zipkinserver_container_name:9411/
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Bernard    6 年前

    首先指定您自己的覆盖网络(见下面代码的底部)并将其用于您的服务。

    version: '3'
    
    services:
      myservice1:
        image: myImage1
        depends_on:
          - myService2
          - myService3
        ports:
          - "8081:80"
        environment:
          - TZ=Europe/Warsaw
        networks:
          - backbone
    
      myservice3:
        image: myImage2
        environment:
          - profile=${MY_PROFILE}
          - TZ=Europe/Warsaw
        networks:
          - backbone
    
    networks:
      backbone:
       driver: overlay
    

    然后在其他服务(如ZIpkin)的compose文件中,添加 backbone 将网络添加到其列表中。如:

    version: '3'
    
    services:
      ZIpkin:
        image: myZImage
        networks:
          - ZIPN
          - backbone
    
    networks:
      backbone:
       external:
         name:  PROJ_backbone
    

    注意,在第一个compose文件之外,您需要在 项目 COMPOSE_PROJECT_NAME 它将是撰写文件所在目录的名称。做一个 docker network ls 找出要使用的网络的全名。

        2
  •  0
  •   Matelutex    6 年前

    通过Portainer,我将我的第二个docker compose文件粘贴到Stack部分(我创建了新的Stack):

    version: '3'
    services:
    
      my_name_zipkin: --> THIS NAME SHOULD WE USE WHEN WE'D LIKE TO COMMUNICATE WITH CONTAINER
        image: openzipkin/zipkin
        ports:
          - "9411:9411"
        networks:
          - zipkin
          - my_old_network_with_services
    networks:
      zipkin:
      my_old_network_with_services:
        external: true
    

    现在我们应该使用'my\u name\u zipkin'名称与此服务通信。服务名称是我们应该用来在容器之间通信的名称。

    所以在我设置的属性文件中:

    spring.zipkin.base-url=http://zipkin:9411/