2016-02-29 24 views
5

documentation about networking is currently非常模糊 - 你如何完成一个虚拟网络,让它定义的服务(容器)在该网络上通信?如何在版本2 docker-compose定义文件中定义网络?

这种情况下的目标并不依赖于预定义的网络,用于为docker-compose定义的集装箱集合。而是在docker-compose定义文件中自包含网络定义。

与预先定义的网络,这个下面会工作如果A应用程序使用的名称B作为主机名来访问监听其端口9000。host:port它会使用它会B:9000里面B打包的应用程序(更具体地说,在我的具体情况下,uri mongodb://B:9000)。

foo: 
    net: my-pre-defined-network 
    container_name: A 
    image: foo 
bar: 
    net: my-pre-defined-network 
    container_name: B 
    image: bar 
    ports: 
    - "9000:9000" 

但我的点被限定搬运工-撰写结构内部的网络,而不是假设之一是定义先验...

TL; DR

被自动创建的默认网络。有关如何解决此网络中的容器的信息,请参阅https://docs.docker.com/compose/networking/的开始部分。

+0

你想定义什么网络? –

+0

将由docker-compose运行的两个容器之间进行连接。现在是相同的主机。 – matanster

回答

8

撰写将会只要你使用的版本2格式创建default网络给你,但如果你想定制网络的文档是在这里:

您可以在撰写文件的顶层创建一个networks部分,并在每个服务的networks部分中引用它们。但是您不需要,只需使用下面评论中所述的默认网络即可。

+0

我不知道那么一个包含的应用程序应该用来联系另一个的主机名,在这样的默认网络上(容器名称或'localhost'为此工作)。此外,在docker-compose up运行后,在docker network ls中没有默认创建的网络。 – matanster

+0

除非,一些奇怪的图像/撰写缓存挫败了我的各种尝试.. – matanster

+0

如果您使用版本2格式,它将创建一个名为'projectname_default'的网络,其中projectname默认为项目目录的基本名称。您使用服务的名称作为连接的主机名。所以在你的例子'foo'和'bar'中。 – dnephin