如何找到 Docker Compose v2 格式的链接服务的公开端口?
How to find exposed port of linked service with Docker Compose v2 format?
在 docker-compose legacy yml 如果你 link 一个服务它用来创建一个环境变量 servicename_PORT 你可以用它来发现 linked 容器。在新的 v2 格式中,我们有用户定义的网络,它将服务名称添加到内部 DNS,因此我们可以连接到 linked 服务,但是我们如何找到 linked 服务公开的端口?我能想到的唯一方法是为每个 linked 服务创建一个环境变量,我可以在其中放置端口,但随后我将在 docker-compose: 中两次使用相同的端口服务本身的公开部分,并且曾经作为连接到它的服务中的环境变量。有没有更干的方法来发现暴露的端口?
它是容器中服务 运行 的任何端口。端口映射不适用于容器<->容器通信,仅适用于主机<->容器通信。
例如:
version: '2'
services:
a:
...
networks:
- my-net
b:
...
networks:
- my-net
networks:
my-net:
假设 a
是 运行 端口 8080
的网络服务器,b
可以通过向 a:8080
发送请求来攻击它。
为此,您通常使用注册器 + 服务发现,这意味着像 https://www.consul.io / 注册器
这样的服务
基本上,这为您添加了一个 API 来为您的服务定义(端口/ ip)观看 kv 存储,然后可以是随机的,或者甚至使用 consul 中包含的 DNS。后者对端口没有帮助,这就是您使用注册表的目的。
如果你想避开这个最佳实践方式。安装 docker 套接字并使用 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 / 过滤器来提取你需要的信息
在 docker-compose legacy yml 如果你 link 一个服务它用来创建一个环境变量 servicename_PORT 你可以用它来发现 linked 容器。在新的 v2 格式中,我们有用户定义的网络,它将服务名称添加到内部 DNS,因此我们可以连接到 linked 服务,但是我们如何找到 linked 服务公开的端口?我能想到的唯一方法是为每个 linked 服务创建一个环境变量,我可以在其中放置端口,但随后我将在 docker-compose: 中两次使用相同的端口服务本身的公开部分,并且曾经作为连接到它的服务中的环境变量。有没有更干的方法来发现暴露的端口?
它是容器中服务 运行 的任何端口。端口映射不适用于容器<->容器通信,仅适用于主机<->容器通信。
例如:
version: '2'
services:
a:
...
networks:
- my-net
b:
...
networks:
- my-net
networks:
my-net:
假设 a
是 运行 端口 8080
的网络服务器,b
可以通过向 a:8080
发送请求来攻击它。
为此,您通常使用注册器 + 服务发现,这意味着像 https://www.consul.io / 注册器
这样的服务基本上,这为您添加了一个 API 来为您的服务定义(端口/ ip)观看 kv 存储,然后可以是随机的,或者甚至使用 consul 中包含的 DNS。后者对端口没有帮助,这就是您使用注册表的目的。
如果你想避开这个最佳实践方式。安装 docker 套接字并使用 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 / 过滤器来提取你需要的信息