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. 【已解决】使用 yarn 安装时,报错node_modules\node sass:Command failed.

    npm install -g mirror-config-china --registry=http://registry.npm.taobao.org npm install node-sass y ...

  2. Ionic 使用 NFC

    Ionic 使用 NFC 哎哟喂,因为项目需要使用 Ionic 调用手机 NFC 功能,踩了好多坑,真的是,不过终于不负众望拿到了id.现在就记录一下我的步骤和踩过的坑! 步骤 我装的Ionic可能是 ...

  3. numpy小结(一)

    1.np.zero(10)     创建一个包含10个元素的一维数组 np.ones((10,10))     创建一个包含10*10个元素1的二维数组 2.np.arange(10,50)      ...

  4. 搭建 Review Board - SVN 审核工具

    一.安装环境 CentOS-6.7,ReviewBoard-2.5.1.1 二.安装环境的配置 1.确认当前系统中有如下包,若没有,使用yum安装 httpd-2.2.15:httpd 指的是apac ...

  5. C编译过程

    system()调用系统命令 C语言源代码——> 预编译(1.去掉注释:2.包含文件)——> gcc -o a.o a.c 编译(编译成二进制质量)——> 链接系统库函数——> ...

  6. hadoop搭建HA集群之后不能自动切换namenode

    在搭好HA集群之后,想测试一下集群的高可用性,于是先把active的namenode给停掉: hadoop-daemon.sh stop namenode 或者直接kill掉该节点namenode的对 ...

  7. 杭电oj 2098——分拆素数和(包含如何判断质数及优化),java实现

    question:分拆素数和 思路: 1.首先从1一直遍历到数据的1/2位置(因为后面的会和前面的重复),因为是要两个数,所以另一个数就是原数据减去遍历的数字(即i 和data-i),如果二者同时为质 ...

  8. 完整安装IIS服务

    此文主要是针对前面提到的 IIS支持json.geojson文件 添加脚本映射时,提示找不到asp.dll时的解决方法. 主要参考了此文:http://www.kodyaz.com/articles/ ...

  9. vue组件引入

    /src/route/index.js import Demo2 from '@/pages/demo2/index.vue' { path : '/demo2', name : 'demo2', c ...

  10. JS高级---作用域,作用域链和预解析

    作用域,作用域链和预解析     变量---->局部变量和全局变量, 作用域: 就是变量的使用范围   局部作用域和全局作用域 js中没有块级作用域---一对括号中定义的变量,这个变量可以在大括 ...