Docker容器的时区问题

如何解决容器的时区问题?

方案一:让容器与宿主机的时间以及时区保持一致,即将宿主机的时间时区配置文件挂载到容器上对应配置上。这样无论宿主机下有多少个容器也能保证时间时区一样。
docker run -v /etc/localtime:/etc/localtime /etc/timezone:/etc/timezone `你的容器名称或容器ID`

注意:有一些宿主机会出现没有timezone这个配置文件,可以通过命令echo "Asia/Shanghai" > /etc/timezone来创建它。

方案二:在创建容器时设置时区的环境变量。
docker run -e TZ="Asia/Shanghai" `你的容器名称或容器ID`

微服务架构下,如何保证不同宿主机的容器能够相互通信?

网络模式配置描述特性
birdge默认docker服务启动时,会创建一个docker0的虚拟网桥。以该模式运行的容器都会连接到这个虚拟网桥上,这里虚拟网桥相当于物料交换机的作用,容器通过交换机连在一个二层网络中。从docker0子网分配一个ip给到容器,并设置自己的ip为默认网关。在宿主机创建一对虚拟网卡veth pair设备,将设备的一端放在容器内,作为容器的网卡eth0。另一端则放在主机中并加入到在docker0的网桥中。为容器自动分配一个172.x.x.x开头的私有内网IP,只能被宿主机及本机docker内所访问呢,而无法跨宿主机访问。如果是微服务架构下,注册到nacos还会以172开头的地址。
host--net=host该模式下的容器不会获得一个独立的Network Namespace,而是同宿主机公用一个Network Namespace。不会虚拟出自己的网卡以及配置IP,而是使用宿主机的IP和端口。但容器其他方面如文件系统、进程列表还是和宿主机隔离。直接使用宿主机IP与外网通信,网络性能比较好。
container--net=container:[NAME OR ID]该模式下新创建的容器将与指定的容器共享一个Network Namespace,不会获取一个独立的Network Namespace, 更不是宿主机共享。除了网络方面外,其他方面还是隔离。-
none--net=none该模式下创建的容器会获得一个独立的Network Namespace,但没有任何网络配置。只有io回环网络,没有网卡、IP、路由信息。无法联网。
方案一:将各容器应用端口分别与对应宿主机进行端口映射,但需要 格外配置 spring.cloud.nacos.discovery.ip = 宿主机的IP 从而保证服务注册到nacos使用的是宿主机IP。
方案二:可以将容器的网络模式配置为host模式,即不再为容器分配私有IP,而是让容器共用宿主机IP。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值