这是我的v3.5
docker-compose.yml
定义文件。它具有一个analytics
网络(使用相同名称的别名),并且其中包含的两个服务都连接到所述网络以相互通信。这行得通。
但是,我也希望将这些服务(端口)公开给HOST机器。有一种方法可以通过在服务本身中定义一个附加网络和/或指定其他ports:
条目来实现,但是由于文档非常混乱且特定于版本(移动目标),我无法确切地知道该怎么做。
在不破坏以下内容的情况下(因为它是内部工作的),我还要添加哪些内容(以及在何处)以将这两种服务都公开给HOST计算机?
谢谢!
version: '3.5'
networks:
analytics:
name: analytics
driver: bridge
# ===========================================
# Service: Zookeeper
# ===========================================
zookeeper:
image: 'wurstmeister/zookeeper:latest'
container_name: analytics-ZooKeeper
networks:
- analytics
ports:
- "2181:2181"
volumes:
- ./data.d/zookeeper.d:/opt/zookeeper-3.4.9/data
# ===========================================
# ===========================================
# Service: Kafka
# ===========================================
kafka:
build:
context: ./kafka.d
dockerfile: Dockerfile
image: nmvega/kafka:latest
networks:
- analytics
ports:
- 9092-9094:9092 # For one to three Kafka brokers.
environment:
#KAFKA_ADVERTISED_HOST_NAME: vps00 # Docker host Name. <--- BEFORE
KAFKA_ADVERTISED_HOST_NAME: 192.168.0.180 # Docker host IP. <--- AFTER
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data.d/kafka.d:/kafka
depends_on:
- zookeeper
# ===========================================
编辑:
经过进一步调查,以上配置(如最初发布的那样)是正确的,只需从Docker主机的name
到Docker主机的IP
(经readme for the image我正在使用)。直到我尝试从主机访问服务之前,无意中使用name
都没关系。
希望这个例子对希望看到它的其他人有价值。 谢谢以下评论者。