我正在设置一个由nginx、redis、mysql、myapp组成的应用程序堆栈。Nginx代理请求我的应用程序。我希望将日志从nginx发送到EFK堆栈,但是在启动nginx服务时会发生错误:
Error response from daemon: dial tcp 127.0.0.1:24224: connect: connection refuseddocker-compose.yml用于用myapp进行堆栈
version: "3.8"
services:
nginx:
image: nginx:alpine
deploy:
mode: replicated
replicas: 2
labels:
- traefik.enable=true
- traefik.http.routers.node1.rule=Host(`${NODE1}`)
- traefik.http.routers.node1.service=nginx
- traefik.http.routers.node2.rule=Host(`${NODE2}`)
- traefik.http.routers.node2.service=nginx
- traefik.http.routers.node3.rule=Host(`${NODE3}`)
- traefik.http.routers.node3.service=nginx
- traefik.http.services.nginx.loadbalancer.server.port=80
placement:
constraints:
- node.role == manager
logging:
driver: fluentd
options:
fluentd-address: localhost:24224
tag: nginx-
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
ports:
- 80:80
depends_on:
- myapp
networks:
- traefik-public
...所有堆栈都位于相同的traefik-公共网络中,如果您从任何容器中生成ping fluentd,则流畅响应。
部分efk.yml
version: "3.7"
services:
fluentd:
image: registry.rebrainme.com/docker_users_repos/3912/dkr-30-voting/fluentd
deploy:
mode: global
volumes:
- /mnt/fluent.conf:/fluentd/etc/fluent.conf
ports:
- "24224:24224"
- "24224:24224/udp"
depends_on:
- elasticsearch
- kibana
networks:
- traefik-public
...fluent.conf
<source>
@type forward
port 24224
bind localhost
</source>
<match *.**>
@type copy
<store>
@type elasticsearch
host elasticsearch
port 9200
logstash_format true
logstash_prefix fluentd
logstash_dateformat %Y%m%d
include_tag_key true
type_name access_log
tag_key @log_name
flush_interval 1s
</store>
<store>
@type stdout
</store>
</match>我寻求帮助
发布于 2022-06-14 06:19:36
为了在efk堆栈和应用程序堆栈之间建立连接,必须将fluentd端口绑定到主机端口。
version: "3.7"
services:
fluentd:
image: my_fluentd_image:latest
deploy:
mode: global
configs:
- source: fluent-conf
target: /fluentd/etc/fluent.conf
ports:
- target: 24224
published: 24224
protocol: tcp
mode: host
depends_on:
- elasticsearch
- kibana
networks:
- traefik-public发布于 2022-06-09 12:15:32
Tldr;
因为您使用的是两个组合文件。docker-compose.yml和efk.yml没有为网络共享相同的值。
到Fix
将两个文件合并到一个单独的文件中。
到Fix (分离了2个文件)
你应该首先创建一个网络。
docker network create traefik-public然后用以下方式更新两个撰写文件
networks:
default:
external:
name: traefik-public这应该能让它发挥作用。
https://stackoverflow.com/questions/72548145
复制相似问题