繁体   English   中英

docker-compose服务和网络

[英]docker-compose service and the network

试图熟悉docker-compose版本2,实际上只是设置了2个可以相互发现的简单节点集群

给定

.
|-- docker-compose.yml
|-- node1
|   `-- Dockerfile
|-- node2
|   `-- Dockerfile

和一个Dockerfile作为

FROM centos:centos6.6

和docker-compose.yml作为

version: '2'
services: 
   dn1: 
    build: ./node1/.
    hostname: dn1.foo.com
    command: tail -f /dev/null
   dn2: 
    build: ./node2/.
    hostname: dn2.foo.com
    command: tail -f /dev/null

在跑步

docker-compose up -d
docker exec -it test_dn1_1 bash
$ hostname
 dn1.foo.com
$ ping dn2.foo.com
 PING dn2.foo.com (23.x.x.122) 
$ ping dn1
 64 bytes from test_dn2_1.test_default (172.21.0.3) ....

默认情况下是否可以从容器中发现服务? 是啊 这里

我假设需要“链接”属性才能使容器彼此了解。

我如何显式配置docker-compose.yaml以使容器可以通过“主机名”相互发现? 已经尝试了链接,但这也不起作用。

谢谢

我不确定我是否理解您的问题:使用docker-compose版本2时,就像您所做的那样,当您调用docker-compose up -d将创建容器,并创建一个自定义网络,服务的容器是部分。

从这个网络内,容器通过他们的服务名称访问,并发现。

尽管这让我感到困扰,但是我认为这是一个错字:如果您像dn2那样创建服务dn1dn2 ,并且处于目录test ,那么您的容器应命名为test_dn1_1test_dn2_1而不是您编写的test_dn1
不,我想这是一个错字。

因此,您可以与docker network ls一起检查是否创建了一个名为test_default的网络,并且如果您运行docker network inspect test_default ,则会找到两个容器。

现在,从test_dn1_1内部,您可以运行ping dn2 ,它应该可以解析。

暂无
暂无

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

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