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:

我正在端口5044上运行另一个docker日志存储(使用)。我能够在我的主机上对localhost:5044上的服务发出请求,因此正确地公开了端口

然后我运行另一个docker compose(Filebeat),但从那里我无法连接到“localhost:5044”。以下是docker compose文件:

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并使用驱动程序而不是桥接器,则是一个解决方案。当然,你必须初始化一个群,但是开销并没有那么大