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. python3练习100题——031

    原题链接:http://www.runoob.com/python/python-exercise-example31.html 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样, ...

  2. Mac使用pip命令安装selenium包报错解决方法

    1.使用命令:  pip install selenium 2.换成命令: python -m pip install selenium 即可成功安装

  3. c++踩坑大法好 赋值和指针的区别

    1,先说结论: 两个指针指向同一个结构,一个改了结构,另一个也会改掉. 两个指针指向同一个结构,修改了其中一个的指向,并且改了其中的内容,另一个不为所动. 2,看例子 main.cpp #includ ...

  4. 短路运算符&&、或运算符||的理解

    一.短路运算符&& 1.当只有两个表达式的时候(如a&&b),先看第一个表达式转换成布尔值的结果若为真,那么再看第二个表达式转换成布尔值的结果,就可以返回该表达式的值了 ...

  5. 0216 aop和打印数据库执行日志

    需求 maven依赖 <dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artif ...

  6. promise的连缀写法

    promise的连缀写法 以上写法相当于写了两个实例 promise.all() 1. promise.all() all这个方法是 promise 构造函数的成员不是实例对象成员,这个方法接受一个参 ...

  7. python:运行command

    #!/usr/bin/python# -*- coding:utf-8 -*- import os os.system('cocos jscompile -s ./dir1 -d ./dir2')

  8. C语言注释符号

    同学们认为注释很简单,那我来看看下面的代码是否正确? 1.似是而非的问题 int main() { int/*...*/i; char* s = "abcdefgh //hijklmn&qu ...

  9. Quality and CCPC

    English foundation: the fractional part 小数部分 disclaimer 免责声明 fictitious  虚构的,编造的;假定的,虚设的;小说式的;假装的 No ...

  10. linux做免密登录,成功分发公钥后登录主机依旧需要输入密码的问题解决

    问题描述 在主机A上用ssh-keygen生成密钥对后,用ssh-copy-id命令将公钥成功copy到主机B上后,测试从A免密登录B,但是依旧需要输入主机B的密码后才能登录. 出现此错误的原因 如果 ...