web-dev-qa-db-ja.com

docker-composeを使用してコンテナのタイムゾーンを設定する

いくつかのDockerfileを実行してコンテナーを作成するdocker-composeファイルがあります。タイムゾーンを設定するためにDockerfileを編集したくないのは、チームのメンバーによっていつでも変更される可能性があり、ローカル環境を変更するためのdocker-compose.override.ymlファイルがあるためです。ただし、私のコンテナの1つ(Seleniumベースのコンテナ)がホストのタイムゾーンを取得していないようで、問題が発生します。それに基づいて、すべてのコンテナーにタイムゾーンを適用します。今、私のDockerfilesで

ENV TZ=America/Denver
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

そして、すべてが正常に動作します。 docker-compose構文で同じコマンドを複製するにはどうすればよいですか?

20
noname
version "2"

services:
  serviceA:
    ...
    environment:
      TZ: "America/Denver"
    command: >
      sh -c "ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && 
      echo $TZ > /etc/timezone &&
      exec my-main-application"

編集:質問はそれを要求しなかったが、私はちょうど追加しましたexec my-main-applicationメインプロセスの指定方法を示します。 execは、my-main-applicationはCtrl-C(SIGINT/SIGKILL)を受け取ります。

23
Bernard

これは簡単な解決策です。

environment:
  - TZ=America/Denver
10
MxWild

最も簡単な解決策は、このようにdocker-compose.ymlのボリュームを共有することです

ipchanger:
  image: codertarasvaskiv/ipchanger:raspberry
  volumes:
    - "/etc/localtime:/etc/localtime:ro"
  • ro-コンテナがホストマシンの/ etc/localtimeからのみ読み取ることができることを意味します。
3
Taras Vaskiv