Dockerによるシステム監視と通知

Dockerによるシステム監視と通知

だから私はLinuxで簡単なサービスを実行するためにこのDocker設定を構成してきました。サービスはsystemd watchdogおよびsdnotify pythonライブラリを使用してサービスが停止しないようにします。私の問題は、通知がdocker VMからsystemdに送信されないようで、監視が常にタイムアウトすることです。これは私のサービスです。

[Unit]
Description=My Service
After=docker.service
Requires=docker.service
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
WatchdogSec=190
TimeoutStartSec=0
NotifyAccess=all
User=root
WorkingDirectory=/root
ExecStartPre=-/usr/bin/docker stop my-container
ExecStartPre=-/usr/bin/docker rm my-container
ExecStartPre=-/bin/bash docker_build.sh
ExecStart=/bin/bash docker_start.sh

[Install]
WantedBy=multi-user.target

次のコマンドを使用してコンテナを起動します。

docker run -t --name my-container --privileged my-service

私のdockerfileは次のようになります。

FROM python:3.6.9

# Open MQTT and HTTPS ports
EXPOSE 443 8883

COPY requirements.txt requirements.txt
RUN python -m pip install -U -r requirements.txt

CMD python -u -m service_module

出力:

May 05 13:31:55 DIET bash[11155]: [SO][Build Date]: 0.1-V-20200122h13:09
May 05 13:31:55 DIET bash[11155]: [SYS][INFO][17:31:55]: Serial port opened on: /dev/ttyS1
May 05 13:31:56 DIET bash[11155]: [GOOGLE][INFO][17:31:56]: Sent message: {'ip': ['x'], 'versions': {}, 'temperature': 37.793, 'cpu': 15.1, 'memory': 47.7, 'net': {'out': 7.95, 'in': 95.587}}
May 05 13:33:37 DIET systemd[1]: my.service: Watchdog timeout (limit 3min 10s)!
May 05 13:33:37 DIET systemd[1]: my.service: Killing process 11155 (bash) with signal SIGABRT.
May 05 13:33:37 DIET systemd[1]: my.service: Killing process 11157 (docker) with signal SIGABRT.
May 05 13:33:37 DIET systemd[1]: my.service: Main process exited, code=killed, status=6/ABRT
May 05 13:34:53 DIET bash[11155]: [GOOGLE][INFO][17:34:53]: Sent message: {'ip': ['x'], 'versions': {}, 'temperature': 33.916, 'cpu': 0.9, 'memory': 47.8, 'net': {'out': 9.882, 'in': 6.336}}

「[GOOGLE] [INFO]」行が表示されたら通知を送信します。最初とタイムアウトの間に約2分程度の時間があるため、リセットされません。よろしくお願いします!

編集する:dockerの外部でこのサービスを実行すると正常に動作します。

ベストアンサー1

使って修正しました。sdnotifyagent。これに対する起動コマンドを変更しました。

/usr/local/bin/sdnotify-proxy /run/my-sd.sock \
    /usr/bin/docker run -t --name my-container --volume /run/my-sd.sock:/run/my-sd.sock \
    --env NOTIFY_SOCKET=/run/my-sd.sock --privileged my

おすすめ記事