内网环境下如何在 Docker 中运行 Fluentd?

内网运行 Fluentd Docker 容器的关键点:离线镜像准备(save/load)、插件离线安装(gem 本地安装进自建镜像)、端口与日志目录挂载。本文给出无外网环境的完整部署方案。

最佳实践
内网环境下如何在 Docker 中运行 Fluentd?封面

内网部署的核心是解决"镜像和插件从哪来":在外网机器拉好镜像 docker save 导出,内网 docker load 导入;需要的插件在打镜像时用 gem 本地安装进去,之后运行与普通容器无异。

1. 离线准备镜像

外网机器:

docker pull fluent/fluentd:v1.16-debian-1
docker save fluent/fluentd:v1.16-debian-1 -o fluentd.tar

拷贝到内网后 docker load -i fluentd.tar

2. 插件离线安装(自建镜像)

Fluentd 输出到 ES/Kafka 等常需插件,一并打进镜像:

FROM fluent/fluentd:v1.16-debian-1
USER root
COPY gems/ /tmp/gems/
RUN gem install --local /tmp/gems/fluent-plugin-elasticsearch-*.gem
USER fluent

gem download 在外网把 gem 及其依赖全部下载好,COPY 进去本地安装。

3. 运行

docker run -d --name fluentd \
  -v /opt/fluentd/conf:/fluentd/etc \
  -v /var/log:/var/log:ro \
  -p 24224:24224 \
  fluentd-custom:latest \
  fluentd -c /fluentd/etc/fluent.conf

注意挂载:配置目录、要采集的日志目录(只读)、接收 forward 协议的端口。

观测云对照

观测云提供离线安装包与内网部署方案:DataKit 离线包直接安装,数据经内网可达的 DataWay/私有网关上报,插件体系内置无需单独安装。

常见问题(FAQ)

Q:怎么确认插件依赖齐了? 外网机器上实际运行一遍 fluentd -c xxx --dry-run,缺什么补什么。

Q:内网时间不同步会影响日志吗? 会——日志时间戳错乱,内网也要配 NTP。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台