[Raspberry Pi] ラズパイの/var/logをRamdisk にして安心していたらDockerのログがSDカード側に書かれていた件について

Docker
Docker RaspberryPi Ubuntu 自宅サーバ

SDカードの寿命を伸ばすために /var/log は Ramdisk に置くように設定しました。ですが、Dockerのログは /var/lib/docker/containers に出力されるので、ぜんぜん対策になっていなかったという当たり前の話。

試した環境

Raspberry Pi 4 (8GB RAM)
Ubuntu 20.10 64bit

$ cat /etc/fstab
LABEL=writable / ext4 defaults 0 0
LABEL=system-boot /boot/firmware vfat defaults 0 1
tmpfs /tmp tmpfs defaults,size=128m 0 0
tmpfs /var/tmp tmpfs defaults,size=128m 0 0
tmpfs /var/log tmpfs defaults,size=64m 0 0

対処内容

Dockerのロギング・ドライバの設定を変更します。詳しくは公式サイトを確認しましょう。
参考:ロギング・ドライバの設定

設定方法は、Dockerデーモンのデフォルトを変更する方法(/etc/docker/daemon.jsonに書き込む方法)と、各コンテナごとに、ロギング・ドライバの設定をする方法があります。

自分のDocker環境では、docker-compose を使って、Wordpressとメールサーバを動しているだけなので、各コンテナ毎(docker-compose.yml)に設定を行う方法をとりました。

現在動いているDockerデーモンのロギング・ドライバの設定を確認するには、下記のコマンドを実行します。

$ docker info --format '{{.LoggingDriver}}'
json-file

デフォルトは、json-file形式での出力となっていて、/var/lib/docker/containers/[container_id] の下にログが出力されています。運用に必要なログは、ホストの/var/logに出力するようにしているので、ロギング・ドライバには none を設定し、出力を止めてしまいます。

設定例

メールサーバの設定。赤字の部分が今回追記したところ。

version: '3'

services: mailserver: image: docker.io/mailserver/docker-mailserver:latest hostname: ${HOSTNAME} domainname: ${DOMAINNAME} container_name: ${CONTAINER_NAME} env_file: mailserver.env ports: - “25:25” - “143:143” - “587:587” - “993:993” volumes: - maildata:/var/mail - mailstate:/var/mail-state - /var/log/mailserver/mail:/var/log/mail/ - /var/log/mailserver/supervisor/:/var/log/supervisor/ # - maillogs:/var/log/mail - ./config/:/tmp/docker-mailserver/ - /etc/letsencrypt/:/etc/letsencrypt/ cap_add: [ “NET_ADMIN”, “SYS_PTRACE” ] restart: always logging: driver: none

volumes: maildata: mailstate:

maillogs:

Wordpressの設定。同じく赤字の部分を追記。

version: '3.1'

services:

wordpress: image: wordpress restart: always logging: driver: none ports: - 127.0.0.1:8080:80 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wp volumes: - ./html:/var/www/html - ./php.ini:/usr/local/etc/php/php.ini depends_on: - db

db: image: mysql/mysql-server:latest # image: mysql:5.7 restart: always logging: driver: none environment:

MYSQL_ROOT_PASSWORD: wordpress

  MYSQL_RANDOM_ROOT_PASSWORD: '1'
  MYSQL_USER: wordpress
  MYSQL_PASSWORD: wordpress
  MYSQL_DATABASE: wp
volumes:
  - db:/var/lib/mysql

volumes: db:

データは永続化されているので、 docker-compose down/up をしてコンテナを構築、ログング・ドライバの設定を反映します。下記のコマンドで、コンテナ毎のロギング・ドライバの設定値を確認できます。

$ docker inspect -f '{{.HostConfig.LogConfig.Type}}' fc4503182c41
none

none になっていれば設定完了です。

わし
わし

SDカードはケアしてないと1年ぐらいで壊れてしまうので、細かいコトだけどラズパイサーバにとっては大事な設定です。

わし
わし

ログがRAMDISKにのっていなかったり、マッピングしたポートはファイアウォールの設定を無視して外部に公開されてしまったり、Docker関連での運用ミスが続いております。

ramdisk
スポンサーリンク
☆Geha☆をフォローする