繁体   English   中英

如何为不同的 Zookeeper Docker 容器设置不同的管理端口?

[英]How to set different admin ports for different Zookeeper Docker containers?

我正在单个系统上创建一个由三个 zookeeper docker 容器组成的集群。 第一个 zookeeper docker 的管理服务器正在使用端口 8080,因此对于其他两个 Zoo 容器,它给出“无法绑定到 /0.0.0.0:8080,地址正在使用”。 我使用的动物园版本为“zookeeper:3.5.6”。

现在我的问题是如何为 8080 以外的 zookeeper 管理服务器分配不同的管理端口?

我尝试了不同的选项来在不同的端口上设置管理服务器,但没有任何效果。

1) - zookeeper.admin.serverPort=8078
2) - ZOO_CFG_EXTRA="admin.serverPort=8077"
3) - admin.serverPort=8078

以下是一位动物园管理员的 docker 撰写。

 zk2:
  hostname: ${LOCAL_HOST}
  image: ${ZOOKEEPER_IMAGE}
  environment:
    - u=${USER}:${USER}
    - JVM_OPTS=-Xmx12g -Xms12g -XX:MaxPermSize=2048m
    - ZOO_MY_ID=${ZOO_MY_ID2}
    - ZOO_SERVERS=${ZOO_SERVER_1} ${ZOO_SERVER_2} ${ZOO_SERVER_3}
    - ZOO_ADMINSERVER_ENABLED=true
    - ZOO_STANDALONE_ENABLED=false
    - zookeeper.admin.serverPort=8078
  volumes:
    - ${VOLUMES_PATH}/zk2/data:/data
    - ${VOLUMES_PATH}/zk2/logs:/datalog
  network_mode: "host"
  ports:
    - ${ZOOK_CL_PORT2}:${ZOOK_CL_PORT2}
    - ${ZOOK_SR_PORT2}:${ZOOK_SR_PORT2}
    - ${ZOOK_EL_PORT2}:${ZOOK_EL_PORT2}
    - ${ZOOK_ADM_PORT2}:8078"

谁能建议我该怎么做?

考虑到您发布的 docker compose 文件,有问题的元素是network_mode: "host" 引用官方文档:

https://docs.docker.com/network/host/

如果您对容器使用主机网络模式,则该容器的网络堆栈不会与 Docker 主机隔离(容器共享主机的网络命名空间),并且容器不会分配自己的 IP 地址。 例如,如果您运行绑定到端口 80 的容器并使用主机网络,则容器的应用程序可在主机 IP 地址的端口 80 上使用。

因此,实际上,您启动的三个 zookeeper 仲裁成员中的每一个都在竞争分配 8080 端口,忽略您稍后定义的端口绑定。

管理服务器端口 8080 仅在容器内可用,直到您使用端口映射公开它。 如果要将端口公开给 docker 主机,则应为两个 zookeeper 容器分配不同的端口映射。

在这种情况下,您正在尝试更改不需要的容器的内部管理服务器端口。 您可以以以下 docker-compose 文件为例 -

version: '3.4'

services:
  zoo1:
    image: 'zookeeper'
    ports:
      - '2181:2181'
      - '8080:8080'
    environment:
      ZOO_SERVER_ID: 1
      ALLOW_ANONYMOUS_LOGIN: "yes"
      ZOO_ADMINSERVER_ENABLED: "true"
      ZOO_SERVERS: "zoo1:2888:3888,zoo2:2888:3888"
  zoo2:
    image: 'zookeeper'
    ports:
      - '3181:2181'
      - '8078:8080'
    environment:
      ZOO_SERVER_ID: 2
      ALLOW_ANONYMOUS_LOGIN: "yes"
      ZOO_ADMINSERVER_ENABLED: "true"
      ZOO_SERVERS: "zoo1:2888:3888,zoo2:2888:3888"

zoo1 - 端口 8080 在容器内可用,我们将相同的端口暴露给 docker 主机。 zoo2 - 端口 8080 在容器内可用,但我们将不同的端口 (8078) 暴露给 docker 主机。

现在,您可以使用端口8080访问接口,使用端口8080访问第一个容器,使用8078端口访问您的 docker 主机中的第二个容器。

简单的方法来做到这一点

ZOO_ADMIN_SERVER_PORT_NUMBER:9999 

ZOO_ADMIN_SERVER_PORT_NUMBER:管理服务器端口。 默认值:8080

bitnami/动物园管理员参考 URL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM