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. nginx反向代理https访问502, nginx反向代理, 支持SNI的https回源,SNI源点,nginx反向代理报错

    正常nginx配置了SSL是可以通过HTTPS访问后端的,但是对有配置SNI + https后端的支持有点麻烦. 编译安装nginx后,看一下是否支持SNI /usr/local/nginx/sbin ...

  2. PP: A dual-stage attention-based recurrent neural network for time series prediction

    Problem: time series prediction The nonlinear autoregressive exogenous model: The Nonlinear autoregr ...

  3. 常用phpstorm快捷键

    欢迎提交你经常使用的快捷键 ctrl+j 插入活动代码提示 ctrl+alt+t 当前位置插入环绕代码 alt+insert 生成代码菜单 ctrl+q 查看代码注释 ctrl+d 复制当前行 ctr ...

  4. vue 报错碰到的一些问题及其规范

    报错信息:Expected error to be handled(需要处理的错误) 这是因为回调函数里面的参数error没有运用到,所以可以不设置参数,或者在回调函数内console.log(err ...

  5. vue 中的路由为什么 采用 hash 路由模式,而不是href超链接模式(Hypertext,Reference)?

    1. vue中路由模式的种类有两种 1. 一种是 hash 模式. 2. 一种是 h5 的 history 模式. 2. hash 和 history 都是来自 bom 对象 bom 来自 windo ...

  6. jdk8-》joining、groupingBy、summarizingInt函数

    拼接函数 Collectors.joining // 3种重载方法 Collectors.joining() Collectors.joining("拼接符") Collector ...

  7. Python入门5 —— 基本运算符

    1.算数运算符('+'.'-'.'*'.'/'.'//'.'%'.'**') print(10 + 3) -- 输出:13 print(10 - 3) -- 输出:7 print(10 * 3) -- ...

  8. 动图演示23个鲜为人知的VSCode快捷键

    动图演示23个鲜为人知的VSCode快捷键 原文地址:dev.to/devmount/23… 代码同步浏览器 安装vccode 安装live server插件 尽管我在VS Code中经常使用许多快捷 ...

  9. C++-怎样写程序(面向对象)

    使用编程语言写好程序是有技巧的. 主要编程技术: 1. 编程风格 2. 算法 3. 数据结构 4. 设计模式 5. 开发方法 编程风格指的是编程的细节,比如变量名的选择方法.函数的写法等. 算法是解决 ...

  10. 微信小程序前台的用户数据入库(后台Laravel)

    首先 我们可以看到微信小程序官方 文档 wx.login   api-login.jpg 通过此图 我们知道 前台要传 一个 code给后台,后台拿到code 并结合appid和appsecret请求 ...