Docker Composeで起動したコンテナの時刻をコンテナ内で変更する

背景

日付に依存したバッチ処理のテストをするのにDocker Composeで起動したコンテナの時刻をコンテナ内で変更しようとしたら、rootユーザなのに operation not permitted と表示され変更できませんでした。

原因

DockerはLinux Capabilitiesの仕組みを使って、デフォルトではできることが制限されていました。

https://docs.docker.com/engine/security/security/#/linux-kernel-capabilities

Man page of CAPABILITIES

対応

Dockerコンテナ起動時に権限を渡してあげるオプションがありました。

docker run -it --rm --privileged example:image bash

https://docs.docker.com/engine/reference/run/#/runtime-privilege-and-linux-capabilities

docker-composeではコンテナの設定に privileged: true を追加しました。

version: '2'
services:
  sample:
    image: centos6:centos6
    privileged: true

https://docs.docker.com/compose/compose-file/#/cpushares-cpuquota-cpuset-domainname-hostname-ipc-macaddress-memlimit-memswaplimit-oomscoreadj-privileged-readonly-restart-shmsize-stdinopen-tty-user-workingdir