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. 远程执行命令_python

    一.远程执行命令模块subprocess Python可以使用subprocess下的Popen类中的封装的方法来执行命令 构造方法 popen() 创建popen类的实例化对象 ··· obj = ...

  2. nginx 部署php项目 404

    服务器重启了一下 然后访问程序报错404的情况 文件存在位置没有问题 niginx配置根目录没有问题 最后检查到端口的时候发现php-fpm的9000端口未打开 service php-fpm res ...

  3. linux - mysql - 卸载:RPM包安装方式的MySQL卸载

    (1)检查是否安装了MySQL组件 [root@DB-Server init.d]# rpm -qa | grep -i mysql MySQL-devel-5.6.23-1.linux_glibc2 ...

  4. 番外:可刷新PDB的管理操作(如何切换PDB Switching Over)

    基于版本:19c (12.2.0.3) AskScuti 主题:可刷新PDB如何进行切换操作 内容说明:本篇延续如何克隆可刷新的PDB(Refreshable PDB)一文,进行切换实验. 具体请参考 ...

  5. blob - 二进制文件流下载

    /** * 返回值文件类型为 blob 二进制流文件 * responseType: 'blob' * params 接口所需参数 * 命名文件名:依据时间戳命名文件名 * (导出时需要延迟,否则导出 ...

  6. Andre Weil的一生

    在20世纪的数学家中,Andre Weil(1906-1998)以其渊博的学识.坎坷的经历和超凡的人格魅力成为引人注目的一员. 他无疑是20世纪最伟大的数学家之一.国际数学家大会把数学划分为19个大的 ...

  7. codeforces 1285D. Dr. Evil Underscores(字典树)

    链接:https://codeforces.com/problemset/problem/1285/D 题意:给n个数a1,a2,a3.....an,找到一个数X,使得X 异或所有的ai ,得到的ma ...

  8. sql注入学习笔记 详解篇

    sql注入的原理以及怎么预防sql注入(请参考上一篇文章) https://www.cnblogs.com/KHZ521/p/12128364.html (本章主要针对MySQL数据库进行注入) sq ...

  9. mysql数据库事务的操作与理解

    --------------------事务----------------------------------------------查询mysql事务隔离级别1.查看当前会话隔离级别select ...

  10. c数据结构 -- 线性表之 复杂的链式存储结构

    复杂的链式存储结构 循环链表 定义:是一种头尾相接的链表(即表中最后一个结点的指针域指向头结点,整个链表形成一个环) 优点:从表中任一节点出发均可找到表中其他结点 注意:涉及遍历操作时,终止条件是判断 ...