docker时区问题和迁移数据问题

最新解决办法:

-v /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone -v /etc/localtime:/etc/localtime:ro

docker run --name tomcat-service-0 -d -p 8080:8080 -v /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone -v /etc/localtime:/etc/localtime:ro -v /home/zjy/logs/tomcat-service-0:/usr/local/tomcat/logs -v /home/zjy/code/ligu/target:/usr/local/tomcat/webapps tomcat

问题1

项目在使用docker部署的时候,发现docke容器里面的时区和服务器的时间相差8个小时。
尽管使用 -v /etc/localtime:/etc/localtime 将服务器时间和容器挂载同步了,但是容器里的tomcat的时区仍然差8个小时。

说明

-v /etc/localtime:/etc/localtime

在启动的时候,使用这个命令,仅仅是将服务器和容器里系统的时间挂载了,你可能进入到容器里面再执行
“date” 命令看到,容器里面的时间的确是更改过来了,但是容器里面的tomcat运行的环境的日期,实际上仍未更改。
因为我们在pull获取这个tomcat镜像的时候,这个tomcat容器的时区已经固定了,所以我们唯一的办法是在编译这个tomcat镜像的时候,就将本地服务器的时间和这个镜像绑定起来。

解决办法(超简单)

使用dockerFile编译镜像。 Dockerfile如下

# Pull base image
FROM tomcat:latest
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

执行如下命令

命令格式:
$docker build -t image_name Dockerfile_path
$:docker build -t timetomcat/timetomcat .

然后后边启动容器的时候,使用编译的这个tomcat即可

如图

docker 容器迁移

说明

docker部署的服务器发生变化的时候,比如数据库,想部署到一个新的地址,这些数据迁移有很多办法:

针对数据库:

1 使用mysql 的主从复制备份,在项目运行期间,将mysql服务器备份到多个地址,具体请看地址:https://zhangjy520.github.io/

2 使用启动mysql的时候,使用 -v 挂载 将本地的路径和容器路径绑定,然后迁移的时候将本地的路径复制到新服务器即可
-v /home/mysql/master/data/db-conf:/etc/mysql/ -v /home/mysql/master/data/db-data:/var/lib/mysql

3 导出mysql数据库呗,再导入到新的地址,比较low

4 使用docker的容器迁移。这篇博客主要讲的是docker,这里我们主要讲讲如何使用docker迁移

解决办法(超简单) 容器迁移

export / import

源服务器上执行

docker export 83271b648212 >time.tar //导出容器,这里这个数字是容器id,会得到一个 tar压缩包

解释:这个压缩包打开可以看到,其实是一个linux服务器的目录结构,这个命令将容器以及容器运行的环境打包了

在目的服务器上执行

cat time.tar | sudo docker import - time:v2 //导入容器,导入得到一个镜像,使用 带command /bin/bash 的docker run
即可得到之前的容器包括文件

启动镜像

sudo docker run -itd --name import_test -p 8087:8080 time:v2 /bin/bash

save / load

sudo docker save web > web.tar
sudo docker load < web.tar

到此这篇关于docker时区问题和迁移数据问题的文章就介绍到这了,更多相关docker时区问题和迁移数据内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • docker中时区问题的处理方法

    背景 这两天在打docker的时候,发现自己的容器启动之后,里面date -R的输出时区是UTC,总是和北京时间差了8个小时. 标准镜像 时区是UTC 查看/etc/localtime,发现默认指向的是Etc/UTC时区.而且TZ环境变量也没有被设置. linux中的时区问题到底是怎么处理的 实际上,我们所有关于时区处理的问题都是glibc中处理时区的问题. 这个问题最权威的文档就是glibc的官方文档,里面关于TZ环境变量的描述介绍了时区问题的处理. https://www.gnu.org/s

  • Docker的MySQL容器时区问题修改

    前言 阿航在开发Springboot项目时, 前端告诉验证码一直无效. 本地测试没有问题, 一看远程服务器的数据库时间, 哇塞–早了8小时. 很明显, 是MySQL的时区问题. 本篇文章就来记录下如何修改Docker 的 MySQL 容器时区. 解决方案 先来校验下数据库是否真的时区不对. 进入MySQL数据库, 运行语句: SELECT NOW(); 会返回类似这样的数据: mysql> SELECT NOW(); +---------------------+ | NOW() | +----

  • docker时区问题和迁移数据问题

    最新解决办法: -v /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone -v /etc/localtime:/etc/localtime:ro docker run --name tomcat-service-0 -d -p 8080:8080 -v /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone -v /etc/localtime:/etc/localtime:ro -v /home/zjy/logs

  • 使用perl实现拆分数据表(mysql)并迁移数据实例

    随着业务量的增长,可能需要对表进行拆分来提高性能. 下面这个例子是将www.jb51.net的users表拆分成10个表ttlsa_user_0-ttlsa_user_9. 拆分迁移数据程序如下所示: 1.创建ttlsa_user_0-ttlsa_user_9表 复制代码 代码如下: #!/usr/bin/perl ################################### ### author: www.jb51.net ### ### QQ群:232608061  ### ###

  • 详解在Docker容器内外互相拷贝数据的方法

    如何在Docker容器内外互相拷贝数据?  从容器内拷贝文件到主机上 复制代码 代码如下: docker cp <containerId>:/file/path/within/container /host/path/target 从主机上拷贝文件到容器内 1.用-v挂载主机数据卷到容器内 docker run -v /path/to/hostdir:/mnt $container 在容器内拷贝 cp /mnt/sourcefile /path/to/destfile 2.直接在主机上拷贝到容

  • hadoop迁移数据应用实例详解

    项目开发中hadoop一直装在虚拟机上,最近要迁移到服务器上.记录下迁移过程. 一.为虚拟机添加一块新的硬盘 虚拟机的初始硬盘只有30G,容不开要导出的数据.两种方式,一是给虚拟机扩容:二是为虚拟机添加一块新的硬盘.这里采取第二种方式. 1.添加虚拟硬盘 至此,添加硬盘成功. 2.将硬盘分区 要使用一块新的硬盘,需要先将硬盘分区,然后挂在文件系统上才能使用. 这里普及一下linux的文件系统与硬盘以及分区的关系.按照一个"由硬到软"的顺序来讲,首先是硬盘,是物理的:我们要使用这个物理硬

  • docker挂载本地目录和数据卷容器操作

    1.docker挂载本地目录 docker可以支持把一个宿主机上的目录挂载到镜像里. 交互模式运行 docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash 后台运行 docker run -d -v /home/dock/Downloads:/usr/Downloads --name ubuntu1 ubuntu64 通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径. 现在镜像内就

  • Java之Rsync并发迁移数据并校验详解

    java调用Rsync并发迁移数据并执行校验 java代码如下 RsyncFile.java import lombok.NoArgsConstructor; import lombok.SneakyThrows; import java.io.*; import java.util.ArrayList; import java.util.Date; import java.util.concurrent.*; /** * @ClassName RsyncFile * @Descriptiom

  • Docker搭建MySQL并挂载数据的全过程

    目录 一.Docker搭建MySQL并挂载数据 二.挂载是否生效 其他 总结 记录 Docker 搭建 MySQL 并挂载数据过程,搭建过程参考自 Docker Hub. 一.Docker搭建MySQL并挂载数据 1.首先安装好 Docker,不知道怎么安装的可以看下 CentOS7安装Docker初体验. 2.下载 MySQL5.7 镜像. docker pull mysql:5.7 3.创建容器并挂载数据. docker run -d --restart=always --name mysq

  • 如何在Docker容器内外互相拷贝数据

    从容器内拷贝文件到主机上 [root@oegw1 soft]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8d418a7b6021 postgres "/docker-entrypoint. 7 hours ago Up 7 hours test1 [root@oegw1 soft]# docker exec -t -i 8d418a7b6021 /bin/bash root@oegw1:/var/lib/po

  • 详解修改docker时区及docker常用命令

    前几天遇到这样一个业务场景,数据库运行在docker 中,docker 的市区是utc 所以就跟北京时间相差8个小时.但是又不能重新运行一个容器,只能保证数据库运行状态,并把宿主机的时区复制给docker 容器.很苦恼, 首先我先把宿主机的时区改成啦CST 北京时间.然后把宿主机的时区复制给docker 容器.命令如下 docker cp /etc/localtime:[容器ID或者NAME]/etc/localtime 当然也可以进入容器进行修改时区(不过我的容器修改的时候总是报/etc/lo

  • Docker Volumn容器间共享数据的实现

    volume是什么 volume在英文中是容量的意思, 在docker中是数据卷的意思,是用来保存数据的容器 为什么要进行数据共享 在集群中有多台tomcat,对于集群中的tomcat部署的代码是同一份代码的副本,如果页面文件发生变化,意味着每个容器中的页面文件都要进行更新,在大规模的集群中这样的工作量会被无限放大,这时候就需要用到数据共享解决此问题,所谓数据共享指的是多个容器共享一个数据副本,在docker环境中我们该如何实现? 数据共享原理 在宿主机的硬盘上开辟一个空间,用来存放共享的数据,

随机推荐