[英]How to setup Java RMI RMI connection between docker containers in different hosts
[英]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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.