Docker compose对主机上端口的访问
我正在端口5044上运行另一个docker日志存储(使用)。我能够在我的主机上对localhost:5044上的服务发出请求,因此正确地公开了端口 然后我运行另一个docker compose(Filebeat),但从那里我无法连接到“localhost:5044”。以下是docker compose文件:Docker compose对主机上端口的访问,docker,docker-compose,Docker,Docker Compose,我正在端口5044上运行另一个docker日志存储(使用)。我能够在我的主机上对localhost:5044上的服务发出请求,因此正确地公开了端口 然后我运行另一个docker compose(Filebeat),但从那里我无法连接到“localhost:5044”。以下是docker compose文件: version: '2' services: filebeat: build: filebeat/ networks: - elk networks:
version: '2'
services:
filebeat:
build: filebeat/
networks:
- elk
networks:
elk:
driver: bridge
您知道为什么localhost:5044在此docker compose中不可访问吗?首先,您链接的compose文件公开了端口5000,但您说您正在尝试连接端口5044 其次,公开端口5044(或5000)将使该端口可供主机使用,而不是供使用其他compose文件启动的其他容器使用 在我看来,你可以:
- 保持第一个服务的原样,而不是secon服务上的localhost:port使用您的_ip:port,您的_ip可以从
或类似的东西中检索,看起来应该像ifconfig-a
192.168.x.x
- 将两个服务连接到外部创建的网络,如下所示:
- 首先使用
docker network create foo创建网络
- 将服务链接到compose文件中的外部网络:
- 首先使用
网络:
测试网络:
外部:真
然后access将日志存储引用从localhost:port
更改为logstash:port
祝您好运您的意思是说,启动另一个compose系统后,您无法连接到localhost:5044?能否也发布另一个compose文件?@omu_negrou此处提供另一个compose:。谢谢,我喜欢第一个解决方案,因为它将两个服务分开。如果我在filebeat compose服务中使用主机本地IP(而不是本地主机),它将按预期工作。不必将IP硬编码到此服务中,是否有一种docker方法可以将主机本地IP以某种方式绑定到容器上可用的主机名中?不太可能,除非您事先执行一些
grep
foo并使用ENV变量注入值。这就是为什么我更喜欢第二种解决方案,因为它隐藏了堆栈的细节,logstash服务甚至不需要公开portOkay。最后,我的服务将在不同的机器上运行,因此docker中的共享外部网络不是一个解决方案。如果您使用compose v3并使用驱动程序而不是桥接器,则是一个解决方案。当然,你必须初始化一个群,但是开销并没有那么大