Then, download Fluentd edge-debian's (edge-debian means latest version of Fluentd) image by docker pull command:
$ docker pull fluent/fluentd:edge-debian
Debian and Alpine Linux version is available for Fluentd image. Debian version is recommended officially since it has jemalloc support. However, the Alpine image is smaller.
Step 2: Launch Fluentd Container
To make the test simple, create the example config below at $(pwd)/tmp/fluentd.conf. This example accepts records from http, and outputs to stdout.
Finally, you can run Fluentd with docker run command:
$ docker run -p 9880:9880 -v $(pwd)/tmp:/fluentd/etc fluent/fluentd:edge-debian -c /fluentd/etc/fluentd.conf
2021-03-16 09:11:32 +0000 [info]: parsing config file is succeeded path="/fluentd/etc/fluentd.conf"
2021-03-16 09:11:32 +0000 [info]: gem 'fluentd' version '1.11.5'
2021-03-16 09:11:32 +0000 [warn]: define <match fluent.**> to capture fluentd logs in top level is deprecated. Use <label @FLUENT_LOG> instead
2021-03-16 09:11:32 +0000 [info]: using configuration file: <ROOT>
<source>
@type http
port 9880
bind "0.0.0.0"
</source>
<match **>
@type stdout
</match>
</ROOT>
2021-03-16 09:11:32 +0000 [info]: starting fluentd-1.11.5 pid=7 ruby="2.6.6"
2021-03-16 09:11:32 +0000 [info]: spawn command to main: cmdline=["/usr/local/bin/ruby", "-Eascii-8bit:ascii-8bit", "/usr/local/bundle/bin/fluentd", "-c", "/fluentd/etc/fluentd.conf", "-p", "/fluentd/plugins", "--under-supervisor"]
2021-03-16 09:11:33 +0000 [info]: adding match pattern="**" type="stdout"
2021-03-16 09:11:33 +0000 [info]: adding source type="http"
2021-03-16 09:11:33 +0000 [warn]: #0 define <match fluent.**> to capture fluentd logs in top level is deprecated. Use <label @FLUENT_LOG> instead
2021-03-16 09:11:33 +0000 [info]: #0 starting fluentd worker pid=16 ppid=7 worker=0
2021-03-16 09:11:33 +0000 [info]: #0 fluentd worker is now running worker=0
2021-03-16 09:11:33.025408358 +0000 fluent.info: {"pid":16,"ppid":7,"worker":0,"message":"starting fluentd worker pid=16 ppid=7 worker=0"}
2021-03-16 09:11:33.026503372 +0000 fluent.info: {"worker":0,"message":"fluentd worker is now running worker=0"}
Step 3: Post Sample Logs via HTTP
Use curl command to post sample logs via HTTP like this:
$ curl -X POST -d 'json={"json":"message"}' http://127.0.0.1:9880/sample.test
Use docker ps command to retrieve container ID and use docker logs command to check the specific container's log like this:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
775a8e192f2b fluent/fluentd:edge-debian "tini -- /bin/entryp…" About a minute ago Up About a minute 5140/tcp, 24224/tcp, 0.0.0.0:9880->9880/tcp tender_leakey
$ docker logs 775a8e192f2b | tail -n 1
2021-03-16 09:12:15.257351750 +0000 sample.test: {"json":"message"}
Next Steps
Now, you know how to use Fluentd via Docker.
Here are some Docker related resources for Fluentd: