专栏首页运维录如何为Docker容器设置环境变量?

如何为Docker容器设置环境变量?

开始之前

上一篇文章介绍了如何创建一个Docker容器,本篇文章(2017-08)介绍如何设置Docker容器环境变量,例如示例中的时区环境变量,需要注意的是容器的环境变量需要在创建容器时指定,容器时运行无法添加或者更改。

问题描述

发现使用 docker创建的 tomcat容器日志时区不正确(时差8小时),即使挂载了宿主机 /etc/localtime文件(宿主机时区是正确的),虽然容器的操作系统时间正常了,但是 tomcat的日志时区仍然是错误的,这对容器日志分析带来麻烦,我们的目标是为创建的tomcat容器设置正确的时区。

环境描述

1. 软件版本

Tomcat:9 On Docker 1.13.1

2. 宿主机时区文件

tail -n1 /etc/localtime
CST-8

3. 创建容器使用的命令

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容器>>

4. 日志时区

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 设置容器环境变量 http://zongming.net/read-1092

如何解决 docker 环境 tomcat 时区问题

http://zongming.net/read-1325

本文分享自微信公众号 - 运维录(gh_70d95b8f5f7c),作者:东南

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为什么Docker镜像大小与仓库中不一致?

    如果仔细观察你会发现,Docker宿主机中某个镜像所占用的磁盘空间和在 Docker Hub(仓库)上看到的镜像大小是不同的,例如 golang:1.9 在 D...

    用户1560186
  • ​ mysql编译安装脚本

    这篇文章发布于 2015年,内容是介绍使用源码方式编译安装 mysql-5.6 ,时间回到 2015年,那时候 Docker还在蓄能阶段没有全面爆发。

    用户1560186
  • 使用shell 批量更改 mysql字符集

    这里还有一个mysql字符乱码的例子,部署redmine过程中,mysql数据库使用了默认的字符集,导致含有中文内容为乱码。

    用户1560186
  • 投融资汇总 | 本周(1.27-2.1)英特尔拟大手笔收购以色列芯片制造商

    本周硬科技领域投融资事件一共29起,人工智能领域发生12起融资事件,占比42%;生物医药领域发生9起融资事件,占比32%;区块链领域发生3起融资事件,分别占比1...

    镁客网
  • 用Python绘制红楼梦词云图,竟然发现了这个!

    Python在数据分析中越来越受欢迎,已经达到了统计学家对R的喜爱程度,Python的拥护者们当然不会落后于R,开发了一个个好玩的数据分析工具,下面我们来看看如...

    猫咪编程
  • 关于一般的并查集求根操作的一组对照研究

    说道并查集,大家一定对于以多叉树状结构为基础的并查集并不陌生,最常见的两种写法如下 1 function getfat(x:longint):longint; ...

    HansBug
  • 30架客机受无人机干扰,大疆:这个锅我不背

    如果说2016年大疆被“炸机”问题面临种种质疑,今年则是被各种无人机威胁民航班机的事件所困扰了。今年1月有人用Mavic Pro 近距离拍摄民航客机飞行引起轩然...

    机器人网
  • 大疆农业无人机AI「果树」模式首次公开作业:开启全自动时代

    这是大疆新版农业无人机的第一次公开作业展示。「人工智能时代果树精准防疫已经从设想变成了现实。」大疆创新公关总监谢阗地在发布会上表示。

    机器之心
  • 如何入侵大疆Phantom 3无人机

    最近,我有了一些空闲时间可以与我的飞行“精灵”一起玩,但不是你想的那种玩,我是在想着如何能够破解这款大疆Phantom 3无人机。 这是我第一次操作无人机或类似...

    FB客服
  • 这架无人机使用AI来自动创造完美的电影镜头

    无人机逐渐成为艺术家最好的朋友,它们可以帮助业余爱好者和经验丰富的电影制作人创造流畅和美观的视频。然而,无人机用于电影摄影是非常具有挑战性的,因为它需要熟练的无...

    AiTechYun

扫码关注云+社区

领取腾讯云代金券