docker容器启动不起来的原因:增加swap虚拟分区

257 阅读2分钟

昨晚忘记ssh密码,然后重新改了密码重启了服务器。因为我使用的是docker,docker restart无法启动完整的4个容器(nginx、mysql、前台、后端服务),然后发现了是因为资源不够的原因。

这个是我服务器的配置(比较rubbish)

先修改密码重启服务器后,看下面解决步骤、详情

1.docker重启

systemctl restart docker

2.查看docker容器

docker ps
// 发现docker没有在跑的容器,然后运行
docker ps -a
// 看容器id或者name,docker重启容器
docker restart xxx
// xxx是指容器id或者容器name,我这里则是docker restart mysql

3.发现mysql启动不起来,要么mysql启动了,后端服务器启动不起来。

[root@centos /]# docker ps
CONTAINER ID   IMAGE                      xxx
161xxxxxxx   blog-jdk8-spring-boot-jar    xxx                  
a1221cxxxx   blog                         xxx
11cxzxxxxx   nginx                        xxx

[root@centos /]# docker ps -a
CONTAINER ID   IMAGE                    STATUS
xxxxxxxxxx    mysql                       Exited (1) 14 seconds ago
xxxxxxxxxx    blog-jdk8-spring-boot-jar   Up 47 minutes
a1221cxxxx    blog                        Up 47 minutes
11cxzxxxxx    nginx                       Up 47 minutes

3.free命令

free -m 
或者
free
// 查看服务器内存MB显示,-m就是MB显示大小

然后发现free可用空间没有了,所以docker容器启动不起来了,所以exited,因此增加Swap虚拟内存分区,扩大容量。

4.增加Swap分区

// 创建大小为1024或者512M的交换文件:
// count可以修改,创建多大填多大,bs为单位
dd if=/dev/zero of=/swapfile bs=1M count=1024
// 使用mkswap命令来设置交换文件
mkswap /swapfile1
// 启用交换分区
swapon /swapfile1
// 写入/etc/fstab,以便在引导时启用
/swapfile1 swap swap defaults 0 0
// 然后再输入free或者free -m查看是否添加
[root@centos /]# free
      total   used   free   shared  buff/cache available
Mem: 2046684  1613492  77932   844    355260      275376
Swap: 524284    0      524284

至此,创建好了Swap分区,然后重新docker restart mysql(或者docker restart你们自己的容器,然后就成功了)

[root@centos /]# docker restart mysql
mysql
[root@VM-12-15-centos /]# free
      total    used        free      shared  buff/cache   available
Mem: 2046684   1830204    73684       400      142796       64976
Swap: 524284  231288    292996
// 只要发现Swap的used被用了,说明启效果了

如果大家遇到服务器重启后docker无法全部启动容器,可以考虑一下资源不够这方面的原因,归根结底还是说明服务器太rubbish哈哈哈哈。