我有一个docker-compose.yml文件:
zookeeper:
image: zookeeper:3.4
ports:
- 2181:2181
kafka:
image: ches/kafka:latest
ports:
- 9092:9092
links:
- zookeeper:3.4
myDpm:
image: dpm-image:latest
ports:
- 9000:9000
links:
- kafka:latest
mySql:
image: mysql:latest
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: root
myMc3:
image: mc3-v3:3.0
ports:
- 9001:9000
links:
- mySql:latest
environment:
runMode: dev
myElastic:
image: elasticsearch:2.4.0
ports:
- 9200:9200
运行docker-compose up -d为所有图像文件创建容器。
请注意我已经为所有人创建了图像,因此当我运行docker-compose.yml文件时,这些图像将不会从服务器中提取。
所有容器都运行成功,但问题是容器无法互相交互,就像我在docker-compose.yml文件中使用链接来提供容器之间的通信一样。但我认为链接选项对我不起作用。 Kakfa无法与zookeeper通信(我使用链接链接zookeeper和kafka)。
简而言之,为什么链接选项不起作用?
或者我在某个地方出错了? 任何人请给我正确的方向。
注意:所有容器都是单独工作但不能相互通信
答案 0 :(得分:0)
链接是服务名称,而不是图像名称:
zookeeper:
image: zookeeper:3.4
ports:
- 2181:2181
kafka:
image: ches/kafka:latest
ports:
- 9092:9092
links:
- zookeeper
myDpm:
image: dpm-image:latest
ports:
- 9000:9000
links:
- kafka
mySql:
image: mysql:latest
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: root
myMc3:
image: mc3-v3:3.0
ports:
- 9001:9000
links:
- mySql
environment:
runMode: dev
myElastic:
image: elasticsearch:2.4.0
ports:
- 9200:9200
所以,即你可以从zookeeper
指向kafka
:
zookeeper:2181
PS:如果您只使用容器间连接(例如之前的例子),则不需要公开端口。您需要访问时公开端口,即通过localhost公开某些服务端口。
答案 1 :(得分:0)
问题是您正在不正确地链接容器。链接到另一个服务中的容器。指定服务名称和链接别名(SERVICE:ALIAS),或仅指定服务名称。有关详细信息,请参阅docker compose documentation。更正了撰写文件。
zookeeper:
image: zookeeper:3.4
ports:
- 2181:2181
kafka:
image: ches/kafka:latest
ports:
- 9092:9092
links:
- zookeeper
myDpm:
image: dpm-image:latest
ports:
- 9000:9000
links:
- kafka
mySql:
image: mysql:latest
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: root
myMc3:
image: mc3-v3:3.0
ports:
- 9001:9000
links:
- mySql
environment:
runMode: dev
myElastic:
image: elasticsearch:2.4.0
ports:
- 9200:9200
您还可以使用别名指定链接:
...
myMc3:
image: mc3-v3:3.0
ports:
- 9001:9000
links:
- mySql:mysqldb
environment:
runMode: dev
...