Docker容器不断重启问题解决

 更新时间:2024年11月21日 10:56:06   作者:小-黯  
本文主要介绍了使用docker-compose.yml配置文件启动容器时遇到的问题,卷标冲突和容器无法启动,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1. compose配置文件

docker-compose.yml

services:
  node_app:
    image: dockerproxy.cn/node:lts-bullseye-slim
    container_name: node_app
    networks:
      macvlan_net:
        ipv4_address: 192.168.2.3
    # 挂载的卷标
    volumes:
      - app:/app
    # 工作目录
    working_dir: /app
    # 自动重启
    restart: always

# 卷标
volumes:
  app:
# 网络
networks:
  macvlan_net:
    external: true

2. 查看卷标

查看docker已经存在的卷标,发现存在卷标node_app

docker volume ls
DRIVER    VOLUME NAME
local     node_app

3. 问题初步探讨

在compose配置文件中,卷标app会被自动重命名为node_app,而恰好上次使用的卷标没有清理,冲突了

# 卷标
volumes:
  app:

4. 初步尝试

  • 删除旧的卷标node_app
  • 使用旧的卷标,compose的卷标配置应当改为如下
# 卷标
volumes:
  node_app:
    external: true

5. 依然无法启动

以最简单的配置文件运行容器, 依然无法启动

services:
  node_app:
    image: dockerproxy.cn/node:lts-bullseye-slim
    container_name: node_app
    working_dir: /app
    restart: no

然后我换了一个容器名称(test),用docker ps -a,名称没问题是test
但是奇怪的是用docker compose exec test bash,却发现找不到test,但在exec后用tab键自动补全的竟然是node_app
匪夷所思,我查看了所有容器并没有这个容器啊,整个dokcer除了我要用到的卷标名称为node_app意外,没有其他相关的名称了,但是我也没挂载它呀

用portainer查看以下该容器的信息

在这里插入图片描述

发现两个奇怪的点
com.docker.compose.project的值是node
com.docker.compose.service的值是node_app,
这不是我最最最开始使用的镜像名和容器名称吗?也是容器默认的名称

6. 解决方案

最后从【Docker】解决docker-compose启动的容器一直处于restarting状态的问题文章中获得该方法

tty:true

该参数作用简介:

交互式操作: 如果您运行一个需要用户输入的交互式应用程序(例如,使用 bash 或某些 CLI 工具),设置 tty: true 将允许您与该应用程序进行交互。没有这个设置,您可能无法获得正确的输入输出体验。

增强输出格式: 某些程序(例如日志查看工具或某些编程语言的 REPL)可以利用 TTY 来生成更友好的输出格式。例如,带颜色的输出通常依赖 TTY 的存在。

保持会话活跃: 有些应用程序(如一些长期运行的进程)可能需要一个 TTY 来保持活跃。如果没有 TTY,应用可能会提早结束或进入休眠状态。

7. 结论

那么这下似乎就明白了,似乎全是镜像的问题,compose会读取镜像的默认项目名和服务名作为堆栈和容器名称,加了contianer_name也没用,然后就是镜像是精简版的,所以默认是一次性运行,必须加上tty:true来维持运行

8. 参考文章

[1]【Docker】解决docker-compose启动的容器一直处于restarting状态的问题

到此这篇关于Docker容器不断重启问题解决的文章就介绍到这了,更多相关Docker容器不断重启内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker push遇到unknown blob问题解决

    docker push遇到unknown blob问题解决

    这篇文章主要为大家介绍了docker push遇到unknown blob问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Docker 清理命令集锦

    Docker 清理命令集锦

    这篇文章主要介绍了Docker 清理命令集锦,需要的朋友可以参考下
    2014-10-10
  • Docker如何固定IP设置的方法

    Docker如何固定IP设置的方法

    本篇文章主要介绍了Docker如何固定IP设置的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • docker-compose部署nginx教程

    docker-compose部署nginx教程

    文章介绍了如何安装和配置docker-compose,创建一个Nginx容器,并通过docker-compose.yml文件进行配置,包括映射文件夹和自定义转发配置,最后,提供了重启和配置生效的脚本
    2025-01-01
  • docker如何动态查看日志最后100行

    docker如何动态查看日志最后100行

    这篇文章主要介绍了docker如何动态查看日志最后100行问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教<BR>
    2024-01-01
  • 深入了解docker(docker镜像、容器、仓库的基本概念)

    深入了解docker(docker镜像、容器、仓库的基本概念)

    本文重点给大家介绍docker镜像、容器、仓库的基本概念,感兴趣的朋友跟着小编一起学习吧
    2016-10-10
  • docker镜像Tag为none的原因及分析

    docker镜像Tag为none的原因及分析

    文章介绍了Docker镜像标签为none的原因及其处理方法,none标签的镜像可能有用,也可能无用,具体取决于是否有容器引用,建议在构建同名同tag的镜像前检查是否存在同名镜像,并注意强行删除镜像可能带来的问题,Docker没有自动删除none镜像的机制,需要手动删除
    2025-02-02
  • Docker Compose部署微服务项目上线功能

    Docker Compose部署微服务项目上线功能

    这篇文章主要介绍了Docker Compose部署微服务项目上线,需求是这样的编写一个SpringBoot + Redis 的微服务项目,并提供 hello接口,每访问一次接口,计数器+1,本文给大家分享实现思路,需要的朋友可以参考下
    2022-07-07
  • Docker部署MySQL镜像的保姆级教程

    Docker部署MySQL镜像的保姆级教程

    docker是一种容器化技术,可以将应用程序及其依赖项打包成一个独立的可移植容器,mysql是一个流行的关系型数据库管理系统,在Docker中部署MySQL镜像可以方便地创建和管理MySQL数据库实例,本文给大家介绍了Docker部署MySQL镜像的教程,需要的朋友可以参考下
    2025-06-06
  • docker中nginx的location转发不生效的解决

    docker中nginx的location转发不生效的解决

    这篇文章主要介绍了docker中nginx的location转发不生效的解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06

最新评论