2017-11-01 15 views
0

私のコンテナの中からjournaldへのログをテストしようとしています。ビルドシステムはコンテナ内で動作するので、これをコンテナ内で動作させたい。私はjournalctlを使用するスクリプトをテストする必要があり、解析するために出力を生成する必要があります。テストスクリプトはコンテナ内で実行する必要があります。Dockerコンテナ内で `systemd-cat`を使用できません

は、私はこのような私のコンテナを起動しています:

$ docker run --rm -it -v $(pwd):/home/edge -w /home/edge --log-driver=journald ubuntu /bin/bash 
[email protected]:/home/edge# systemd-cat -t overflow ls /etc 
Failed to create stream fd: No such file or directory 

私はそれが動作するホストDebianに同じコマンドを実行する場合:

$ systemd-cat -t overflow ls /etc 
$ sudo journalctl | grep overflow 
Nov 01 08:09:53 nanode64 overflow[9037]: acpi 
Nov 01 08:09:53 nanode64 overflow[9037]: adduser.conf 
Nov 01 08:09:53 nanode64 overflow[9037]: adjtime 
Nov 01 08:09:53 nanode64 overflow[9037]: aliases 
Nov 01 08:09:53 nanode64 overflow[9037]: alternatives 
Nov 01 08:09:53 nanode64 overflow[9037]: anacrontab 
Nov 01 08:09:53 nanode64 overflow[9037]: apache2 
Nov 01 08:09:53 nanode64 overflow[9037]: apg.conf 
Nov 01 08:09:53 nanode64 overflow[9037]: apm 
Nov 01 08:09:53 nanode64 overflow[9037]: apt 
... 

答えて

1

bash以外のあなたのコンテナ内で実行されているものは何もありません。コンテナ内にはjournaldが実行されていないため、systemd-catと通信するソケットはありません。私はsystemd-catを使用しようとすると、journaldログドライバがどのように動作するか誤解している可能性があります。

Dockerのjournaldロギングドライバを使用しています。つまり、コンテナによってstdout/stderrに出力されたものはホストジャーナルに表示されます。あなたはそれが実際に様々なが含まれていることを見ることが-o verboseを使用してそのメッセージを表示した場合

# journalctl -fl 
... 
Nov 01 11:45:08 lkellogg-pc0dzzve dockerd[3736]: this is a test 
... 

docker run --rm -v $(pwd):/home/edge -w /home/edge --log-driver=journald ubuntu echo this is a test 

あなたは、ホスト上で、見るでしょう:あなたが実行した場合つまり、

# journalctl -fl -o verbose MESSAGE='this is a test' 
Wed 2017-11-01 11:48:02.002147 EDT [s=9a99c0d26c3548a2ba6a6416bc37094c;i=15c9cce1;b=3f2b2d45203c485f9fa4373148c81925;m=219ad310e0d;t=55cedcbef19b3;x=6f1641d7b8ebf7ee] 
    PRIORITY=6 
    _TRANSPORT=journal 
    _UID=0 
    _GID=0 
    _SYSTEMD_SLICE=system.slice 
    _BOOT_ID=3f2b2d45203c485f9fa4373148c81925 
    _MACHINE_ID=229916fba5b54252ad4d08efbc581213 
    _HOSTNAME=lkellogg-pc0dzzve 
    _CAP_EFFECTIVE=3fffffffff 
    _PID=3736 
    _COMM=dockerd 
    _EXE=/usr/bin/dockerd 
    _CMDLINE=/usr/bin/dockerd -G docker --dns 172.23.254.1 --log-driver journald -s overlay2 
    _SYSTEMD_CGROUP=/system.slice/docker.service 
    _SYSTEMD_UNIT=docker.service 
    _SELINUX_CONTEXT=system_u:system_r:unconfined_service_t:s0 
    MESSAGE=this is a test 
    CONTAINER_ID=5d20a635fcff 
    CONTAINER_ID_FULL=5d20a635fcff5c57212a65d5d0ebd77f3fd9529a8fd4fe6b718238877ecf5173 
    CONTAINER_NAME=optimistic_easley 
    CONTAINER_TAG=5d20a635fcff 
    _SOURCE_REALTIME_TIMESTAMP=1509551282002147 
+0

これは私の問題を解決することはできませんが、コンテナ内のホストの 'journald'ソケットに接続できますか? –

+0

もちろん、 '-v/run/systemd/journal:/ run/systemd/journal'を' docker run'コマンドラインに追加することでジャーナルソケットを公開することができますが、ほとんどの場合、標準ドッカーのロギング動作。 – larsks

+0

私はコンテナの中からログにアクセスする必要があります。私は間違っているかもしれませんが、私は "標準的なドッカーのロギング動作"を使ってこれを行うことはできないと思います。 –

関連する問題