1. 概述

    1. 连接容器, 退出容器
  2. 命令

    1. run
    2. exec
    3. attach
    4. 退出
  3. 选项

    1. -i
    2. -t
    3. -d

1. docker run

  1. 概述

    1. docker run 通常用来创建新容器
    2. docker run 的 三个命令行选项
  2. ref

    1. Confused about Docker -t option to Allocate a pseudo-TTY
  3. 命令行选项 相关的实验

    1. 准备

      1. 基础命令

        # 下面这个, 是 基础命令
        # 后面的 命令行选项, 会按照这个模式插入
        > docker run ubuntu:18.04
    2. 尝试

      1. 没有选项

        1. 表现

          1. 当场暴毙
      2. 只有 -i

        1. 表现

          1. 可以交互
          2. 但是终端好像出了问题, 命令执行结果看不到
      3. 只有 -d

        1. 表现

          1. 当场暴毙
      4. 只有 -t

        1. 表现

          1. 不会暴毙
          2. 但是输入什么都没反应
          3. 只有退出
      5. -it

        1. 表现

          1. 正确进入容器
          2. 命令可以执行
          3. 结果正确显示
      6. -dt

        1. 表现

          1. 容器正常启动
          2. 容器为 运行状态
  4. 结论

    1. 正常使用的话

      1. 需要 i 或者 d 的配合

        1. -it

          1. 交互式
        2. -dt
          1. 后台式
    2. 其他说明
      1. 这个结论, 只适合 ubuntu 的镜像

        1. ubuntu 镜像的 cmd 语句, 执行的命令, 是 /bin/bash

          1. /bin/bash 不是那种可以后台执行的命令
          2. redis 或者 nginx 的镜像, 直接 -d 没有问题
      2. 其他镜像, 需要灵活结合 cmd 和 entrypoint 分析
        1. 一般情况下, 前台用 -it, 后台用 -d 即可

2. docker: run, exec, attach

  1. 概述

    1. 这三个命令的区别
  2. ref

    1. 小知识:docker run、exec和attach使用和区别
  3. 区别

    1. run

      1. 概述

        1. 在一个 新容器 里执行命令
      2. 常见模式

        > docker run -it <image> <cmd>
        > docker run -dt <image> <cmd>
    2. exec

      1. 概述

        1. 在 已经存在 的容器里, 执行命令
      2. 常见模式

        > docker exec -it <image> <cmd>
    3. attach

      1. 概述

        1. 连接 已经存在 的容器
      2. 常见模式

        > docker attach <image>
      3. 问题

        1. 尝试发现, 对 -d 容器不太好使

          1. 可以进入
          2. 但是 输入命令, 无法执行
        2. 网上有说, 同一容器被用户 attach 的时候, 会出现阻塞

          1. 没有验证
      4. 结论

        1. attach 可以放弃不用

3. 退出容器

  1. 概述

    1. 从容器中退出
  2. 退出方式

    1. exit
    2. ctrl + q + p

1. exit

  1. 概述

    1. Linux命令行 最常见的退出方式
  2. 操作

    1. 这个简单, 我就不再多说了
  3. 问题

    1. run -it

      1. 问题

        1. 用 run -it 命令启动, 并连接了容器
        2. 直接输入 exit, 会让容器变为 exit 状态
      2. 其他

        1. 使用 run -dt 启动的容器

          1. 如果用 exec -it 连接, 再 exit 退出

            1. 容器不会关闭

2. ctrl + q + p

  1. 概述

    1. 应对 run -it 启动容器的退出问题
  2. 操作

    1. run -it 启动容器
    2. ctrl + q + p 退出
  3. 结果

    1. 正常退出
    2. 容器依然是 up 状态

3. 建议

  1. 建议使用 run -dt 命令启动容器

    1. 概述

      1. 使用 run -dt 命令
      2. 启动成功后, 用 exec -it 连接
      3. 如果要退出的话, 直接 exit 也没有问题
  2. 如果需要用 run -it 命令启动

    1. 概述

      1. 启动后, 需要用 ctrl + q + p 退出

        1. 保证容器不变为 exit 状态

ps

  1. 伪终端

    1. 大概认识, 现在通过 windows 连接 linux 的命令行, 基本都是伪终端
    2. 但是为啥要这么叫, 怎么来的, 我之前看过, 但是现在记不住了...
  2. 其他

    1. docker 镜像的基础知识
    2. 有的容器, 启动后不需要命令, 也不会挂, 这其中是什么原理
      1. 比如 nginx 的容器

Docker - 容器的 连接 与 退出的更多相关文章

  1. [转帖]docker容器保持运行不退出

    docker容器保持运行不退出 2019年01月20日 23:21:22 chvalrous 阅读数 1511   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...

  2. [笔记]使用Go语言Redigo包在Docker容器内连接Redis容器的方法

    Docker容器之间的连接可以带来不少方便,下面记录下如何在自己容器内通过环境变量连接与之连接的Redis容器的方法. 先起一个Redis的Docker容器,命名为 redis,再起一个自己的Dock ...

  3. Docker容器内连接宿主机即CentOS的Mysql服务器

    docker的宿主机是虚拟机下的CentOS 博主最近遇到一种情况,从服务器拷贝了一份数据库在宿主机Mysql服务器上,想要用本地的数据库测试自己的代码正确性,但是项目程序都是靠docker一键部署的 ...

  4. 解决netcore在docker容器中连接oracle报错(timezone region not found)

    错误提示: timezone region not found错误原因:docker 容器内时区不是 CST 导致解决办法:1.在dockerfile 中增加一下命令ENV TZ=Asia/Shang ...

  5. docker 容器启动后立马退出的解决方法

    原因: 容器同时只能管理一个进程,如果这个进程结束了容器就退出了,但是不表示容器只能运行一个进程(其他进程可在后台运行),但是要使容器不退出必须要有一个进程在前台执行.   解决方案: 启动脚本最后一 ...

  6. 一键部署 Spring Boot 到远程 Docker 容器,就是这么秀!

    不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...

  7. docker容器的学习笔记

    目录 Docker入门学习笔记(一) 1. 什么是Docker? 2. Docke的目标 3. Docker通常应用场景 4. Docker的基本组成 补:Docker容器相关技术简介 安装Docke ...

  8. Docker 容器技术

    前言: 之前感觉Docker是一种小虚拟机,docker和KVM虚拟机之间有什么区别.联系.可以应用在什么样的生产环境? 一.Docker是什么以及和KVM的区别 1.docker概念? Docker ...

  9. Docker容器的启动与停止

    启动docker:systemctl start docker 停止docker:systemctl stop docker 重启docker:systemctl restart docker 查看d ...

随机推荐

  1. Linux之温故知新2

    1.关于ssh免密码登陆的ssh-keygen, ssh-copy-id的使用, 然后使用ssh-copy-id user@remote将公钥传给服务器, 以及别名 1 C:\Users\linxmo ...

  2. FOJ-2013 A Short Problem (前缀和)

    Problem Description The description of this problem is very short. Now give you a string(length N), ...

  3. 广度优先搜索(Breadth First Search, BFS)

    广度优先搜索(Breadth First Search, BFS) BFS算法实现的一般思路为: // BFS void BFS(int s){ queue<int> q; // 定义一个 ...

  4. Jquery change方法

    jQuery 事件 - change() 方法 当输入域发生变化时改变其颜色: $(".field").change(function(){ $(this).css("b ...

  5. jQuery添加/删除元素

    jQuery append() 方法 jQuery append() 方法在被选元素的结尾插入内容(仍然该元素的内部). 追加前:<p>这是一个文本段落</p> $(" ...

  6. VNCserver 安装 及 oracle过程总结

    一.安装桌面系统 1.命令   yum grouplist ---列举系统中以组安装的包(组安装的包会包括很多,组安装一下就就可以安装很多附在的包.) 2.  yum groupinstall &qu ...

  7. C++-Typedef结构体遇上指针

    继Typedef遇上结构体数组后,我们又产生了新的疑问. 上一期地址:https://www.cnblogs.com/lemaden/p/10122929.html 昨天一位朋友又问我了,说结构体数组 ...

  8. Spring家族几大插件

    Spring家族很庞大,从最早先出现的服务于企业级程序开发的Core.安全方面的Security.到后来的作为各种数据源桥梁的Data.最近几年很火的Boot,以及最新推出的正在蓬勃发展的Cloud( ...

  9. django 搭建一个投票类网站(三)

    之前修改index的视图的代码,工作原理是先试用loader方法加载视图,然后HTTPResponse方法初始化一个HTTPResponse对象并返回给浏览器.对于很多django视图来说,他们的工作 ...

  10. java的并发

    问题: 过程: 正常流程:记录生成:状态=1-->北京:状态 = 3,4,-->定时任务:状态=5--->结束 异常流程:一条待处理的的记录生成以后,马上被定时任务处理,加载到内存, ...