Docker容器之常见问题
数据问题
目前遇到迁移服务器的问题, 涉及到基础服务的数据迁移(包括mysql, mongodb, redis, rabbitmq等) 例子:
version: "2"
services:
mysql:
image: mysql:5.7.11
container_name: mysql
hostname: mysql
mem_limit: 16g
restart: always
ports:
- 30001:3306
volumes:
# - /etc/timezone:/etc/timezone
- /etc/localtime:/etc/localtime
- $PWD/conf/mysql/my.cnf:/etc/mysql/my.cnf
- /root/app/container_data/mysql:/var/lib/mysql
- /root/app/sqldumps:/sqldumps
environment:
- MYSQL_ROOT_PASSWORD=111
分两种情况
- 迁移新服务器
新服务器本身无可用数据, 可以直接将挂载出来的数据文件直接拷贝过去 内网通的情况, 在旧服务器上执行如下命令,需root权限
scp -r /root/app/container_data root@新服务器ip:/root/app
- 迁移已存在且存在有用数据的服务器
只能通过工具导出导入,如navicat
迁移完后进入docker-compose.yml所在目录
docker-compose up -d
只要数据卷文件都在, docker容器的数据就不会丢失
时区问题
迁移遇到时区问题
将本机的/etc/localtime更改成上海时间(默认UTC), 两种方法根据linux版本而定 1
cp -i /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
或者
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2
vi /etc/timezone
将文件里的内容替换为Asia/Shanghai
- MongoDB
docker-compose.yml
version: "2"
services:
mongo:
image: mongo:3.2.4
container_name: mongo
command: mongod --auth
mem_limit: 8g
restart: always
ports:
- "37017:27017/tcp"
volumes:
- /etc/timezone:/etc/timezone
- $PWD/data/db:/data/db
docker-compose up -d 发现mongodb的时间不对, 记录的创建时间少了8小时, 初步判断是时区问题 本机正常, 只能进容器查看
docker exec -it mongo /bin/bash
查看时间
date
发现容器时间与服务器时间不符合 于是修改容器时间
vi /etc/timezone
将文件里的内容替换为Asia/Shanghai
进入mongo
mongo
Date()
退出回到本机
docker restart mongo
发现mongo时区正常了, 时间与服务器同步了
|