社区首页 >问答首页 >当使用Docker命令时,docker容器退出(0),但可以使用docker命令

当使用Docker命令时,docker容器退出(0),但可以使用docker命令
EN

Stack Overflow用户
提问于 2015-08-17 11:29:24
回答 1查看 6.8K关注 0票数 4

我正在尝试修改一个GUI应用程序,并取得了一些成功。如果我将dockerfile构建成一个映像,然后执行一个docker run --name testcontainer testimage,则进程似乎开始了,但突然停止了。然后使用docker ps检查容器,以确认没有容器正在运行。然后我检查docker ps -a,可以看到它与状态代码exit(0)一起退出。然后,如果我运行命令docker start testcontainer,它似乎会再次启动ENTRYPOINT命令,但这一次它能够继续并弹出GUI。

我的最佳猜测是,当我运行docker run命令时,进程会开始,但可能会分叉到后台进程中,导致容器退出,因为前台进程已经结束。不过,这可能是远远不够的,因为您可能认为docker start命令会导致相同的结果。我在想如何让这个过程保持在前台,但我不知道该如何去做。有什么建议吗?

更新:我编辑了Dockerfile以使用supervisord来管理GUI应用程序的启动。现在,我的docker命令将启动主管,这将启动我的GUI应用程序,而且它可以工作。关于这一点,需要注意的是,主管表明:

INFO spawned: myguiapp with pid 7

INFO success: myguiapp entered RUNNING state

INFO: exited: myguiapp (exit status 0; expected)

此时主管和容器仍在运行,这似乎表明主进程启动子进程。由于主管仍然在运行,所以我的容器一直在运行,GUI应用程序也出现了,我可以使用它。当我关闭GUI时,主管报告:

CRIT reaped unknown pid 93

主管仍在运行,导致容器无法关闭。所以我得去CTRL杀主管。我宁愿不使用主管,但如果需要的话,我希望主管在子流程结束时优雅地关闭自己。如果我能弄清楚如何让我的容器或主管跟踪主进程的子进程,那么我认为这将得到解决。

EN

回答 1

Stack Overflow用户

发布于 2015-08-17 12:51:10

第一个问题可能是因为您的应用程序需要一个tty,而不是分配一个pseudo tty。尝试像这样运行您的容器:

代码语言:javascript
代码运行次数:0
复制
docker run -t --name testcontainer testimage

当您第二次执行docker start时,它会以某种方式分配伪tty,并且进程将继续运行。我自己试过的。不过,我在码头的任何地方都找不到这个信息。

此外,如果您的UI是交互式的,您可能希望:

代码语言:javascript
代码运行次数:0
复制
docker run -t -i --name testcontainer testimage
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32058215

复制
相关文章
matlab vargin_matlab varargin
那么在这个函数里,varargin就是一个cell数组,它包含了用户输入的参数。下面是一个例子:
全栈程序员站长
2022/11/16
9240
matlab在axis,matlab中axis的用法
>> axis([0 2*pi -0.9 0.9]) 图 5.1.3 使用了图形修饰的 plot 函数绘制的正弦曲线 5.1.3 图形的比较显示 在一般默认的情况下,MATLAB 每次使用 plot ……
全栈程序员站长
2022/09/06
1.9K0
java浅拷贝和深拷贝的区别_js中深拷贝和浅拷贝的区别
浅拷贝:对基本类型的数据是值拷贝,对String类型的拷贝也可以看作是值拷贝,这里不做讨论;
全栈程序员站长
2022/11/15
8890
java浅拷贝和深拷贝的区别_js中深拷贝和浅拷贝的区别
c浅拷贝和深拷贝的区别_js中深拷贝和浅拷贝的区别
先考虑一种情况,对一个已知对象进行拷贝,编译系统会自动调用一种构造函数——拷贝构造函数,如果用户未定义拷贝构造函数,则会调用默认拷贝构造函数。
全栈程序员站长
2022/09/27
7240
c浅拷贝和深拷贝的区别_js中深拷贝和浅拷贝的区别
JS中数组的深拷贝和浅拷贝
变量保存的是一个指针,存放在栈内存中,指针指向一个位置,这个位置就是存放在堆内存引用类型的值
杨肆月
2019/08/15
2.4K0
JS中数组的深拷贝和浅拷贝
Python 中浅拷贝和深拷贝的区别
CVPR 2021 相关论文、代码 、解读和demo整理,同时为了方便下载论文,已把部分论文上传到上面了,欢迎小伙伴们 star 支持一波!
AI算法与图像处理
2021/04/21
9770
Python 中浅拷贝和深拷贝的区别
python中浅拷贝和深拷贝
由结果看,PHP中array_push方法和array_object的结果也不同。
老高的技术博客
2022/12/27
4080
JavaScript中浅拷贝和深拷贝的区别和实现
要理解 JavaScript中浅拷贝和深拷贝的区别,首先要明白JavaScript的数据类型。JavaScript有两种数据类型,基础数据类型和引用数据类型。
Javanx
2019/09/05
6400
JavaScript中浅拷贝和深拷贝的区别和实现
JavaScript中浅拷贝和深拷贝的区别和实现
要理解 JavaScript中浅拷贝和深拷贝的区别,首先要明白JavaScript的数据类型
tianyawhl
2019/04/04
5350
JavaScript中浅拷贝和深拷贝的区别和实现
深拷贝与浅拷贝以及写时拷贝
假设B复制了A,当修改A时,看B是否会发生变化。如果B也跟着变了,说明这是浅拷贝;如果B没变,那就是深拷贝。
Jasonangel
2021/05/28
6640
C++中的深拷贝和浅拷贝介绍
对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如:
芯动大师
2023/09/18
4610
C++中的深拷贝和浅拷贝介绍
matlab如何使用循环语句_matlab中循环语句怎么写
clc clear a=1; m=3; for i=1:m %理解此处的m不是向量,是循环时的某一个固定值 b(i)=a*i %得到的b值保留前一个循环中计算的值。是一个随着i变化的向量,loop1时向量中有1个元素;loop2时有2个元素,分别是loop1中值和loop2中的值。这种情况下,不会覆盖loop1中参数。 c=a*i %得到循环某个值的具体值。是一个元素,loop2会覆盖loop1中元素 d(3)=a*i %d(3)表示其中包含3个元素,若不够则用0填。固定为一个有3个元素的向量,元素不够是用0填,会覆盖loop1中元素。 end
全栈程序员站长
2022/09/27
6.2K0
浅谈JS中对象的深拷贝和浅拷贝
浅拷贝和深拷贝的'深浅'主要针对的是对象的‘深度’,常见的对象都是'浅'的,也就是对象里的属性就是单个的属性,而'深'的对象是指一个对象的属性是另一个对象,也就是对象里面嵌套对象,就像嵌套函数一样。 为什么要使用深拷贝和浅拷贝呢? 如果现有var obj1 = {...}这个对象,想要复制对象obj1,一贯的做法就是obj2 = obj1,这时虽然obj2拥有了obj1的所有属性,但obj2却不是自由的,因为它的改动会影响到obj1,obj1的改动也会影响到obj2,这不是我们所希望的,所以要用到深拷贝和浅
小胖
2018/06/27
6.8K2
在MATLAB中RSA加密
[Modulus, PublicExponent, PrivateExponent] = GenerateKeyPair;
万木逢春
2019/05/10
1.8K0
并发容器之写时拷贝的 List 和 Set
对于一个对象来说,我们为了保证它的并发性,通常会选择使用声明式加锁方式交由我们的 Java 虚拟机来完成自动的加锁和释放锁的操作,例如我们的 synchronized。也会选择使用显式锁机制来主动的控
Single
2018/01/04
7360
并发容器之写时拷贝的 List 和 Set
Objective-C中的深拷贝和浅拷贝
        在Objective-C中对象之间的拷贝分为浅拷贝和深拷贝。说白了,对非容器类的浅拷贝就是拷贝对象的地址,对象里面存的内容仍然是一份,没有新的内存被分配。对非容器类的深拷贝就是重写分配一块内存,然后把另一个对象的内容原封不动的给我拿过来。对容器类的深拷贝是对容器中的每个元素都进行拷贝,容器类的浅拷贝是对容器里的内容不进行拷贝,两个容器的地址是不同的,但容器里的所装的东西是一样的,在一个容器中修改值,则另一个浅拷贝的容器中的值也会变化。所以对非容器类看对象是否为深拷贝还是浅拷贝就得看对象的内存
lizelu
2018/01/11
1.1K0
Python中浅拷贝和深拷贝的区别总结与
单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) # 内存地址相同 a = [1,2] # 可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) # 内存地址不相同 单层深拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.deepcopy(a) print(id(a),id(copy_a)) #
py3study
2020/01/21
5120
这6个命令助你玩转matlab自定义函数
函数对于matlab的重要性这里就不在赘述了(你了解matlab局部函数吗?)。matlab自带的函数虽包罗万象、但并不可能揽括一切,在实际编程过程中往往还需要编程者根据实际问题编写适合解决当下问题的函数,这也就是所谓的自定义函数。
巴山学长
2019/11/01
7930
PHP中引用的详解(引用计数、写时拷贝)
PHP中引用意味着用不同的名字访问同一个变量内容,引用不是C的指针(C语言中的指针里面存储的是变量的内容,在内存中存放的地址),是变量的另外一个别名或者映射。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。 最接近的比喻是 Unix 的文件名和文件本身――变量名是目录条目,而变量内容则是文件本身。引用可以被看作是 Unix 文件系统中的紧密连接或者wins的快捷方式。
黄规速
2022/04/14
3.7K0
点击加载更多

相似问题

varargin在matlab中的应用

12

利用varargin的MATLAB fminsearch

13

MATLAB中的Varargin不适合我

17

PHP在写数组和对象上的拷贝

113

将varargin和nargin从Matlab转换为Python

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档