【Docker学习】docker start深入研究

docker start也是很简单的命令。但因为有了几个选项,又变得复杂,而且...

命令:

docker container start

描述:

启动一个或多个已停止的容器。

用法:

复制代码
docker container start [OPTIONS] CONTAINER [CONTAINER...]

别名:

docker start(docker的一些命令可以简写,docker start就等同于docker container start)

选项:

选项 描述 备注
-a, --attach 附加到标准输出(STDOUT)/标准错误(STDERR),并转发信号
--checkpoint 从这个检查点恢复 试验性质(守护进程)
--checkpoint-dir 使用自定义的检查点存储目录 试验性质(守护进程)
--detach-keys 覆盖用于分离容器的键序列
-i, --interactive 附加到标准输入(STDIN)

示例1:docker start

如图所示,我有两个退出状态的容器,现在打算重新启动。执行指令:

复制代码
docker start data-wordpress-1 data-db-1

结果如下。data-wordpress-1和data-db-1全部启动。

示例2:选项--attach

终端A在正常启动命令中加入--attach(-a)选项

复制代码
docker start -a data-wordpress-1 data-db-1
you cannot start and attach multiple containers at once

结果出现错误,也就是说,使用--attach选项,只能用于一个容器。这次只启动一个wordpress

复制代码
docker start -a data-wordpress-1

可以看出,终端A给出wordpress的标准输出(STDOUT)和标准错误(STDERR)内容。

这时,我们打开另一个终端B,使用curl访问这个容器。

复制代码
curl localhost:8080

可以看到终端A中输出了内容,响应了终端B的访问。

示例3:选项--checkpoint、--checkpoint-dir

这是一个试验性质的功能,未来充满不确定性。这里不做具体展开。使用该功能,还需要安装criu。请看上一篇:【Docker学习】docker checkpoint 简单了解

用法:

复制代码
docker start --checkpoint CHECKPOINT_ID --checkpoint-dir DIR [OTHER OPTIONS] CONTAINER

示例4:选项--detach-keys

使用这个选项覆盖Docker的分离键序列。这在你使用的Docker默认键序列与其他应用程序发生冲突时非常有用。

要为单个容器覆盖序列,就可以使用选项--detach-keys。格式要么是一个字母[a-Z],或者是与以下任何一个结合ctrl-:

  • a-z:单个小写字母字符

  • @:@符号

  • :左中括号

  • _:下划线

  • ^:^符号

失败的操作,但正确的使用。

复制代码
docker start --attach --detach-keys="ctrl-x" my-redis

以上命令计划使用docker start启动my-redis,并附加到标准输出和标准错误上,并设置ctrl-x来退出这种模式,并且不停止my-redis。

经过测试,结果如下:

快捷键不起作用。网上看了不少文章,说默认要使用ctrl-p、ctrl-q来使用,但是也没成功。

最终只能通过ctrl-c强行停止容器。

目前使用一种方法可以解决这一问题,就是用到docker attach的--sig-proxy选项。

复制代码
docker start my-redis
docker attach --sig-proxy=false my-redis

这样ctrl-c可以退出标准输出,进入命令提示符。不过,这样attach到my-redis又看不到任何标准输出。不知道是不是只有特定的容器才会起作用。

我又尝试使用官网的例子

复制代码
docker run -dit --name my-alpine alpine top -b
docker attach my-alpine

可以看到结果正常显示标准输出。

又因为使用了-i和-t选项,这次相继按下ctrl-p,ctrl-q,程序也能正常退出到命令模式,并且没有关闭my-alpine。

因为docker start只有-i,没有-t,所以是不支持分离键序列。但官网给出了这个选项,又没有测试用例,不知道是没有考虑到,还是有bug。

若是网友对这块比较熟悉,欢迎跟我讨论,不胜感激!

相关推荐
冷崖16 分钟前
网络学习-异步IO(八)
服务器·网络·学习
Java爱好狂.23 分钟前
接上篇:如何在项目中实现ES查询功能?
java·运维·jenkins·es·java面试·后端开发·java程序员
三次拒绝王俊凯1 小时前
java求职学习day47
java·开发语言·学习
杜子不疼.1 小时前
【Linux】信号机制详解:进程间通信的核心
linux·运维·服务器
DarkBule_1 小时前
0成本get可信域名:dpdns.org公益域名获取全攻略
css·学习·html·github·html5
YJlio2 小时前
ProcDump 学习笔记(6.14):在调试器中查看转储(WinDbg / Visual Studio 快速上手)
笔记·学习·visual studio
知花实央l2 小时前
【Web应用安全】SQLmap实战DVWA SQL注入(从环境搭建到爆库,完整步骤+命令解读)
前端·经验分享·sql·学习·安全·1024程序员节
luoganttcc3 小时前
介绍一下 multiprocessing 的 Manager模块
linux·运维·服务器
青衫码上行3 小时前
【JavaWeb学习 | 第二篇】CSS(1) - 基础语法与核心概念
前端·css·学习
小白讲编程3 小时前
C++ 基础学习总结:从入门到构建核心认知
c++·学习·青少年编程