如何爲Docker容器設置環境變量?

如何爲Docker容器設置環境變量?

開始之前

上一篇文章介紹瞭如何創建一個Docker容器,本篇文章(2017-08)介紹如何設置Docker容器環境變量,例如示例中的時區環境變量,需要注意的是容器的環境變量需要在創建容器時指定,容器時運行無法添加或者更改。

問題描述

發現使用 docker創建的 tomcat容器日誌時區不正確(時差8小時),即使掛載了宿主機 /etc/localtime文件(宿主機時區是正確的),雖然容器的操作系統時間正常了,但是 tomcat的日誌時區仍然是錯誤的,這對容器日誌分析帶來麻煩,我們的目標是爲創建的tomcat容器設置正確的時區。

環境描述

軟件版本

Tomcat:9 On Docker 1.13.1

宿主機時區文件

tail -n1 /etc/localtime
CST-8

創建容器使用的命令

docker run -tid --name test -p 10080:8080 \
 -v /usr/local/tomcat/logs \
 -v /etc/localtime:/etc/localtime \
 --label aliyun.logs.catalina=stdout \
 --label aliyun.logs.access=/usr/local/tomcat/logs/localhost_access_log.*.txt \
 tomcat:9

如果對 docker命令參數不熟悉可以使用 --help 幫助,或者參考這篇文章 <<創建一個Docker容器>>

日誌時區

docker logs --tail 1 test 

10-Aug-2017 06:43:48.390 INFO [Thread-5] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"]

注意: 日誌時間 06:43:48 是不正確的。

解決方法

創建容器時指定TZ時區環境變量,例如設置時區爲 Asia/Chongqing 。

docker run -tid --name new -p 10080:8080 \
    -v /usr/local/tomcat/logs \
    -e TZ=Asia/Chongqing \
    --label aliyun.logs.catalina=stdout \
    --label aliyun.logs.access=/usr/local/tomcat/logs/localhost_access_log.*.txt \
    tomcat:9

再次驗證容器時區

docker logs --tail 1 new 
10-Aug-2017 14:44:51.736 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]

注意: 日誌時間 14:44:51 纔是正確的。

命令幫助

run子命令 -e 參數設置容器的環境變量可以指定多次,多個環境變量還可以使用讀取文件的方式 。

docker run --help | grep -i '\-env'
  -e, --env list        Set environment variables
      --env-file list   Read in a file of environment variables

參考文章

如何爲Docker容器設置環境變量?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章