プログラミング学習のメモ書き

テクノロジーとか音楽とか読んだ本とかなんか色々の自分用めも。

VScode Remote containerでの時間同期の話とDockerのtimezone設定方法

先日構築したVScode Remote containerで意気揚々とgo言語をやってたんだけど、time.Nowで時間取得したら全然コンピューターの時間が違うのだった。

 

Dockerについて調べたところコンテナ内の時間は基本ローカルOSに同期しているらしい。コンテナ内のターミナルでdateコマンドを打つとtimezoneがUTCだった。

root@docker:# date
Mon May 25 08:56:26 UTC 2020

 

結論から話すと

DockerfileにAsia/Tokyoの設定を追加した。

環境変数の設定とシンボリックリンクの設定をするだけ!!

# Timezone Setting
ENV TZ='Asia/Tokyo'
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

 

調べるとDockerのtimezone論議は色々情報が錯綜している模様

これを見るとDockerfileに環境変数シンボリックリンクの設定をすると、ディストリビューションに左右されないほとんどのLinuxで使用できるtimezoneの設定ができるみたいだ!!賢い!!!ちなみにAnserの一番上に来ているものです。

serverfault.com

 

 

実行した詳細は以下の通り。

VScode Remote containerのDockerfileにAsia/Tokyoの設定を追加した。

# Timezone Setting
ENV TZ='Asia/Tokyo'
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

 

対象のコンテナを開くとDockerfileがあるのでこれを編集し、設定を入れました。VScode Remote containerの開発環境を作った話はこちら

f:id:ki-wi:20200525175032p:plain

 

左下の緑のところからコンテナのリモートを終了し、再度VScodeのコンテナを開くと「Rebuild」するか尋ねられるので実行する。開くまでちょっと時間かかるので少し待つ。

 

無事にJSTになった!!よかった!!

root@docker:# date
Mon May 25 17:57:27 JST 2020

 

あとがき

またもやDockerの勉強になった。少しずつ設定を覚えていこう。今回はコンテナ内での設定方法にしたけど、「docker run」コマンドでDocker起動時に設定する方法も良さそう。これは使う人次第だろうね。今の所はせっかくの仮想環境なのでコンテナ内で解決!!