Docker实践总结

本文解决Docker防火墙或网络导致的容器启动错误,自定义my.cnf配置失败的问题,并详细介绍Docker镜像的导出导入方法,包括使用export、import、save和load命令的区别。

【1】防火墙或者网络错误

① 修改了防火墙或者网络,启动容器报错

背景:修改了iptables,没有重启docker服务

启动容器报错:

Error response from daemon: Cannot restart container 2907e4188b3d: iptables failed: iptables -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables : No chain/target/match by that name.
(exit status 1)

解决

重启docker服务:service docker restart

【2】自定义my.cnf但是启动失败

在宿主机上自定义my.cnf将会自动同步到容器内,然后启动容器失败。自定义my.cnf中主要添加了日志配置,容器启动的时候将会添加数据卷/mydocker/mysql/log:/var/log/mysql

log-error      = /var/log/mysql/error.log

使用命令查看日志:

docker logs -f -t --tail 100   2c1ae7a2f3cd

如下所示:
在这里插入图片描述
很显然是权限问题,使用chmod命令为宿主机上/mydocker/mysql/log赋予权限:

chmod -R 777 /mydocker/mysql/log

【3】docker镜像的导入导出

① 使用 export 和 import

使用 docker export 命令根据容器 ID 将其导出成一个文件。

docker export 容器ID > 容器名称.tar

使用 docker import 命令则可将这个文件导入进来。

docker import - 容器名称 < 容器名称.tar

② 使用 save 和 load

使用 docker save 命令根据 ID 将镜像保存成一个文件。

docker save 镜像ID > 镜像名称.tar

还可以同时将多个 image 打包成一个文件,比如下面将镜像库中的 postgres 和 mongo 打包:

docker save -o images.tar postgres:9.6 mongo:3.4

使用 docker load 命令则可将这个镜像文件载入进来。

docker load < 镜像名称.tar

③ save和export区别

  • 对于Docker Save方法,会保存该镜像的所有历史记录
  • 对于Docker Export 方法,不会保留历史记录,即没有commit历史
  • docker save保存的是镜像(image),docker export保存的是容器(container);
  • docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
  • docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流烟默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值