Docker启动Active: activating (start) Containerd did not exist sucessfully Exist status code 2问题

问题报错
现象:Docker启动特别慢,且Docker状态为:Active: activating (start)
报错:Containerd did not exist sucessfully Exist status code 2问题
重启Docker,重启操作系统均无法解决。

问题环境:
Docker版本:docker-18.06.3-ce.tgz
CPU架构:aarch64
系统:银河麒麟

解决办法:
Docker版本升级为:docker-20.10.7.tgz解决。

Docker制作MySQL镜像使用docker-entrypoint-initdb.d机制初始化数据库

前言

本文我们主要讲解在Docker制作MySQL镜像时,如何通过docker-entrypoint-initdb.d机制来初始化数据库。

制作MySQL镜像时,如何初始化数据库呢?

MySQL官方给我们提供了很简单的方案:
用户只需要将准备好的初始化脚本拷贝至MySQL镜像内的docker-entrypoint-initdb.d目录即可。

docker-entrypoint-initdb.d机制

首次启动容器时,默认会执行docker-entrypoint-initdb.d目录下的.sh、.sql和.sql.gz的脚本;如果有多个按文件名的字母顺序执行。

docker-entrypoint-initdb.d目录下的脚本只有在MySQL容器首次启动时才会被执行,如果容器已经存在并正常运行,那么再次启动容器时,这些脚本不会被重新执行。

在测试脚本时,如果我们修改了脚本文件并希望重新执行它们,那我们就需要删除现有的MySQL容器以及挂载的数据卷目录。在重新创建容器时,才会重新执行docker-entrypoint-initdb.d下的脚本。

注意:删除数据卷目录文件时,将会永久丢失其中的所有数据,请确保在执行此操作之前进行必要的备份。

DockerFile指定时区

dockerfile指定时区:

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN echo 'Asia/Shanghai' >/etc/timezone

当我们在初学docker时经常会发现,容器启动后服务器或日志时间经常是慢8小时,这个其实就是由于未指定时区的问题。根据不同场景,我们可以在docker-compose配置、dockerfile、java启动命令、数据库连接地址等不同地方指定时区。以上即为直接在dockerfile指定时区的方法。

银河麒麟系统docker-compose服务设置开机自启动

前言

本文主要使用Systemd服务的方式来设置docker-compose服务开机自启动。

设置步骤

1、准备服务文件

创建一个以.service结尾的服务文件,smaple.service示例内容如下:

[Unit]
Description=Smaple Service
After=network.target

[Service]
ExecStart=/data/docker/startup.sh
Restart=always

[Install]
WantedBy=multi-user.target