カテゴリー
Linux

Dockerfile でタイムゾーン設定するメモ

まとめ

FROM debian:stretch-slim なイメージはこれで OK でした。
例えば、今回設定したのは次です。

  • php:apache
  • mysql:latest
FROM mysql:latest

ARG TZ=UTC
ENV TZ ${TZ}
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

COPY ./config-file.cnf /etc/mysql/conf.d/

${TZ} は、docker-compose.yml で定義しました。args と environment です。
${WORKSPACE_TIMEZONE} は、.env ファイルで定義しています。

services:
  php_apache:
    build:
      context: ./php_apache
      args:
        TZ: ${WORKSPACE_TIMEZONE}
    environment:
      - TZ=${WORKSPACE_TIMEZONE}
... 略 ...

解説

$TZ = Japan と仮定して進めます。

ln -snf /usr/share/zoneinfo/Japan /etc/localtime

シンボリックリンクを、/etc/localtime に貼ることでタイムゾーンを変更します。
日本語にするには、Japan または Asia/Tokyo としますが、後者は Asia/Tokyo へのシンボリックリンクのようです。
したがって、どちらを指定しても良いのでしょう。

root@c53ac240481e:/var/www/html# ls -al /usr/share/zoneinfo/Japan 
-rw-r--r-- 1 root root 318 May  5 03:22 /usr/share/zoneinfo/Japan
root@c53ac240481e:/var/www/html# ls -al /usr/share/zoneinfo/Asia/Tokyo 
lrwxrwxrwx 1 root root 8 May  5 03:22 /usr/share/zoneinfo/Asia/Tokyo -> ../Japan
root@c53ac240481e:/var/www/html# 
echo Japan > /etc/timezone

こちらも、タイムゾーン設定です。/usr/share/zoneinfo/ にあるタイムゾーンを /etc/timezone に書き込むことで設定できます。

なぜ 2 箇所で設定?と思いますが、次のページが参考になりました。

いろいろ調べたこと

MySQL と PHP のイメージってdのイメージをもとにしているの?

debian:stretch-slim でした。

タイムゾーンってどうやって調べればいいの?

date コマンドでわかるのでした。

root@c53ac240481e:/var/www/html# date
Wed Oct 17 07:50:21 JST 2018
root@c53ac240481e:/var/www/html# 

これは、変更後の出力で、JST となっています。

タイムゾーン設定ってどうすればいいの?

この方法は今回のコンテナでは使えませんでした。。。

おわりに

今回設定したのは、Laradock でタイムゾーン設定をしていたからでした。

タイムゾーンを設定しなければ、また、コンテナごとに異なっていたら、どんな嫌なことがあるだろうと思いましたが、それは次のページが参考になりました。

イメージの元イメージをを調べて、それにあったタイムゾーンを設定する、という手順で、使用するすべてのイメージのタイムゾーンを統一するのが無難かなと思っています。

以上です。

コメントを残す