如何使用Docker Compose v2格式查找链接服务的公开端口?

时间:2017-01-03 18:04:34

标签: docker docker-compose docker-networking

在docker-compose legacy yml中,如果链接用于创建环境变量servicename_PORT的服务,可以使用该服务来发现链接容器的端口。在新的v2格式中,我们有用户定义的网络,它将服务名称添加到内部DNS,因此我们可以连接到链接服务,但我们如何找到链接服务公开的端口?我能想到的唯一方法是为我可以放置端口的每个链接服务创建一个环境变量,但是我将在docker-compose中有两次相同的端口:一次在服务本身的公开部分和一次作为连接到它的服务中的环境变量。是否有更干的方法来发现暴露的端口?

2 个答案:

答案 0 :(得分:0)

它正在运行服务的任何端口,就像在容器中一样。端口映射不适用于容器< - >容器通信,只有主机< - >集装箱通信。

例如:

version: '2'

services:
  a:
    ...
    networks:
    - my-net
  b:
    ...
    networks:
    - my-net
networks:
  my-net:

我们假设a正在端口8080运行网络服务器,b可以通过向a:8080发送请求来点击它。

答案 1 :(得分:0)

为此,您通常使用registrator + service-discover,这意味着像https://www.consul.io / registrator这样的服务

基本上,这会为您添加一个API,以便为您的服务定义(端口/ IP)观看kv存储,然后可以随机,甚至使用领事中包含的DNS。后者不会帮助端口,这就是你使用注册表。

如果你想躲避这种最佳实践方式。安装docker socket并使用docker inspect <servicename>查找端口。

services:
  other:
    container_name: foo
    image: YYYY
  theonedoingthelookup:   
    image: ZZZZ
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

您需要在容器中安装docker cli工具,然后在ZZZZ容器内运行

docker inspect YYYY

使用一些grep / awk /过滤器来提取您需要的信息