如何在内部网络中在docker中流畅运行

sha*_*aft 6 fluentd docker

我的 docker-compose 文件中有以下配置:

 fluentd:
    build: ./fluentd
    container_name: fluentd
    expose:
    - 24224
    - 24224/udp
    depends_on:
    - "elasticsearch"
    networks:
    -  internal

 public-site:
    build: ./public-site
    container_name: public-site
    depends_on:
    - fluentd
    logging:
      driver: fluentd
      options:
        tag: public-site
    networks:
    -  internal

networks:
  internal:
Run Code Online (Sandbox Code Playgroud)

当我使用 启动应用程序时docker-compose up,网络服务器存在错误消息ERROR: for public-site Cannot start service public-site: failed to initialize logging driver: dial tcp 127.0.0.1:24224: connect: connection denied

另一方面,当我从 fluentd ( ports: 24224:24224)发布端口时,它可以工作。问题是我不想在主机上发布这些端口,因为它绕过了 linux 防火墙(即它向所有人公开了 fluentd 端口,请参阅此处)。

这令人困惑,因为公开端口应该使其可用于网络中的每个容器。我使用的是fluentd 和网络服务器之间的内部网络,所以我希望 fluentd 的暴露端口就足够了(事实并非如此)。

当我连接到 webserver 容器时,我可以 ping 并解析 fluentd 容器,所以有一个连接。然而,由于某些原因,在启动时它不会接受没有已发布端口的 fluentd 配置。

Ste*_*ano 5

如果您位于容器中,与 127.0.0.1 的通信始终会出现问题。我在文档中发现这个解释比我做的要好得多:

要将 Fluentd 驱动程序用作默认日志记录驱动程序,请在 daemon.json 文件中将 log-driver 和 log-opt 键设置为适当的值,该文件位于 Linux 主机上的 /etc/docker/ 或 C:\ProgramData\docker Windows Server 上的 \config\daemon.json。有关使用 daemon.json 配置 Docker 的更多信息,请参阅 +daemon.json。

以下示例将日志驱动程序设置为 Fluentd 并设置 fluenced-address 选项。

 {
   "log-driver": "fluentd",
   "log-opts": {
     "fluentd-address": "fluentd:24224"
   }
 }
Run Code Online (Sandbox Code Playgroud)

源代码:https: //docs.docker.com/config/containers/logging/fluidd/

编辑:这一直有效,直到您希望主机上有一个应用程序与 dockerized fluidd 通信(然后这是一个痛苦)