Docker(八)Container无法正常启动Restarting (1) Less than a second ago的原因及解决办法

55 篇文章 0 订阅

一、Docker启动异常表现:

背景:images:keywords_exact:v1和启动container的命令如下:

$ cat docker_run.sh
docker run --network host 
--name keywords_exact 
--restart=always 
-d keywords_exact 
bash run.sh
$ cat run.sh
#!/bin/bash
gunicorn -c gunicorn.py run:app
$ cat gunicorn.py
workers = 3
threads = 3
timeout = 100
bind = '0.0.0.0:7339'
pidfile = './log/gunicorn.pid'
loglevel = 'info'
max_requests = 50000
max_requests_jitter = 2

状态反复restaring,用命令docker container ls -a查看

$ docker container ls -a
CONTAINER ID   IMAGE         COMMAND       CREATED        STATUS      PORTS     
  NAMES                             
6aaf2018609d   keywords_exact:v1  "bash urn.sh"   6 seconds ago    Restarting (1) Less than a second ago    keywords_exact

二、如何定位问题出在了哪里

这个举一个我操作过程中遇见的问题:缺少文件夹log。

去看Docker日志:$docker logs [容器名/容器ID]

$docker logs 6aaf2018609d
[2021-04-29 20:32:42 +0800] [1] [INFO] Starting gunicorn 20.0.4
Error: ./log doesn't exist. Can't create pidfile.
[2021-04-29 20:32:43 +0800] [1] [INFO] Starting gunicorn 20.0.4
Error: ./log doesn't exist. Can't create pidfile.

这里说你所构建的镜像中,没有log这个文件夹。当container的状态是Restarting时,无法通过$ docker exec -it [containerid] bash来进入容器内部,进不去,就没办法mkdir log,也就无法docker commit -m ‘add log file’ [containerid] [imageid:tag]。

解决办法:最简单的方式创建一个容器,并进入容器内:

$ docker run -it keywords_exact:v1 /bin/bash
[root@6aaf2018609d log]# mkdir log
# 按住contrl + p + q,退出容器,然后提交修改给镜像,
$ docker commit -m 'add log file' 6aaf2018609d keywords_exact:v1
sha256:40bc7daabf66ff786e4a2ebaeba187e13c464756e51700849d6451754fb8476a
$
$ docker images
REPOSITORY                                  TAG              IMAGE ID       CREATED         SIZE
keywords_exact                       v1               40bc7daabf66   7 seconds ago   5.29GB
# 然后kill掉这个容器,
$ docker kill 6aaf2018609d
$ docker rm 6aaf2018609d
# 再重新启动一个容器,此时重启成功
$ bash docker_run.sh

其它可能的原因:

1.内存不够:找内存
Docker 启动至少需要2G内存,首先执行free -mh命令查看剩余内存是否足够。

$free -mh
            total        used        free      shared  buff/cache   available
Mem:         15G         14G          627M        195M        636M     726M
Swap:         0B          0B          0B

2.端口冲突:换端口

该docker监听端口已经被其他进程占用,一般此种问题容易出现在新部署的服务,或在原有机器上部署新的后台服务,所以在部署之前应该执行命令检查端口是否已经被占用,如果上线后发现占有则应改为可用端口再重启之。

检查命令:

$netstat -nltp|grep [规划的端口号]

参考:

1.https://blog.csdn.net/u010716706/article/details/69524863

2.docker常见错误:http://www.360doc.com/content/20/0810/09/29585900_929446809.shtml

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值