在执行/ bin / bash时出现了docker-py问题

时间:2014-09-19 08:52:17

标签: docker dockerpy

我有一个基于ubuntu基础映像构建的docker镜像,安装的软件很少。

我有一个启动脚本,如下所示

#!/bin/bash
/usr/local/sbin/process1 -d
/usr/local/sbin/process2 -d 
/bin/bash

现在我使用docker-py python库从python文件中启动多个这些容器。

c = docker.Client(base_url='unix://var/run/docker.sock',
              version='1.12',
              timeout=10)

container = c.create_container("p12", command="/startup.sh", hostname=None, user=None,
               detach=False, stdin_open=False, tty=False, mem_limit=0,
               ports=None, environment=None, dns=None, volumes=None,
               volumes_from=None, network_disabled=False, name=None,
               entrypoint=None, cpu_shares=None, working_dir=None,
               memswap_limit=0)

c.start(container, binds=None, port_bindings=None, lxc_conf=None,
    publish_all_ports=False, links=None, privileged=False,
    dns=None, dns_search=None, volumes_from=None, network_mode=None,
    restart_policy=None, cap_add=None, cap_drop=None)

这很好用,当我在Ubuntu桌面,Ubuntu 14.04.1 LTS和docker-py版本1.10上测试时,我可以开始多次(比如3)。它将启动码头工人,我可以稍后进行码头工作,并在终端上工作。

现在我将我的测试环境转移到Ubuntu服务器版本,其中包含Ubuntu 14.04.1 LTS和docker-py版本1.12。

我看到的问题是,当我使用相同的脚本并尝试启动3个泊坞窗时,在启动process1和process 2作为后台进程后,所有的docker都会退出。似乎/ bin / bash根本不执行。

如果我执行与#34相同的泊坞窗图像; docker run -t -i p14 /startup.sh - >然后一切都很好。 docker正确启动,我可以访问终端。

唯一的问题是当我执行这个python库时。

任何人都有任何类似的问题......关于如何调试此问题的任何想法......或修复的任何指针?

谢谢, 基兰

1 个答案:

答案 0 :(得分:2)

当您使用{{1}运行泊坞窗图像时,您在tty-t)模式下与开放式stdin-i)不同之处您在docker run -t -i p14 /startup.sh配置中同时设置了stdin_open=Falsetty=False

由于您的泊坞窗容器没有docker-py且无法从tty获取任何输入,因此您对stdin的呼叫无关,因此退出代码为0。

亲自尝试:

带有tty

的开放标准输入
/bin/bash

没有tty的开放标准输入(即没有提示,但你仍然可以通过标准输入发送命令)

$ docker run -t -i ubuntu:14.04 /bin/bash                                  
root@1e7eda2bba03:/# ls -la                                                
total 7184                                                                 
drwxr-xr-x  21 root root    4096 Sep 19 21:30 .                            
drwxr-xr-x  21 root root    4096 Sep 19 21:30 ..                           
-rwxr-xr-x   1 root root       0 Sep 19 21:30 .dockerenv                   
-rwx------   1 root root 7279686 Jul 21 10:50 .dockerinit                  
drwxr-xr-x   2 root root    4096 Sep  3 03:33 bin                          
drwxr-xr-x   2 root root    4096 Apr 10 22:12 boot                         
drwxr-xr-x   4 root root     360 Sep 19 21:30 dev                          
drwxr-xr-x  61 root root    4096 Sep 19 21:30 etc                          
drwxr-xr-x   2 root root    4096 Apr 10 22:12 home                         
drwxr-xr-x  12 root root    4096 Sep  3 03:33 lib                          
drwxr-xr-x   2 root root    4096 Sep  3 03:33 lib64                        
drwxr-xr-x   2 root root    4096 Sep  3 03:33 media                        
drwxr-xr-x   2 root root    4096 Apr 10 22:12 mnt                          
drwxr-xr-x   2 root root    4096 Sep  3 03:33 opt                          
dr-xr-xr-x 240 root root       0 Sep 19 21:30 proc                         
drwx------   2 root root    4096 Sep  3 03:33 root                         
drwxr-xr-x   7 root root    4096 Sep  3 03:33 run                          
drwxr-xr-x   2 root root    4096 Sep  4 18:41 sbin                         
drwxr-xr-x   2 root root    4096 Sep  3 03:33 srv                          
dr-xr-xr-x  13 root root       0 Sep 19 18:44 sys                          
drwxrwxrwt   2 root root    4096 Sep  4 18:41 tmp                          
drwxr-xr-x  10 root root    4096 Sep  3 03:33 usr                          
drwxr-xr-x  11 root root    4096 Sep  3 03:33 var                          
root@1e7eda2bba03:/#  

带有tty的关闭标准输入(您可以看到提示,但无法输入任何命令)

$ docker run -i ubuntu:14.04 /bin/bash                                     
ls -la                                                                     
total 7184                                                                 
drwxr-xr-x  21 root root    4096 Sep 19 21:32 .                            
drwxr-xr-x  21 root root    4096 Sep 19 21:32 ..                           
-rwxr-xr-x   1 root root       0 Sep 19 21:32 .dockerenv                   
-rwx------   1 root root 7279686 Jul 21 10:50 .dockerinit                  
drwxr-xr-x   2 root root    4096 Sep  3 03:33 bin                          
drwxr-xr-x   2 root root    4096 Apr 10 22:12 boot                         
drwxr-xr-x   4 root root     340 Sep 19 21:32 dev                          
drwxr-xr-x  61 root root    4096 Sep 19 21:32 etc                          
drwxr-xr-x   2 root root    4096 Apr 10 22:12 home                         
drwxr-xr-x  12 root root    4096 Sep  3 03:33 lib                          
drwxr-xr-x   2 root root    4096 Sep  3 03:33 lib64                        
drwxr-xr-x   2 root root    4096 Sep  3 03:33 media                        
drwxr-xr-x   2 root root    4096 Apr 10 22:12 mnt                          
drwxr-xr-x   2 root root    4096 Sep  3 03:33 opt                          
dr-xr-xr-x 243 root root       0 Sep 19 21:32 proc                         
drwx------   2 root root    4096 Sep  3 03:33 root                         
drwxr-xr-x   7 root root    4096 Sep  3 03:33 run                          
drwxr-xr-x   2 root root    4096 Sep  4 18:41 sbin                         
drwxr-xr-x   2 root root    4096 Sep  3 03:33 srv                          
dr-xr-xr-x  13 root root       0 Sep 19 18:44 sys                          
drwxrwxrwt   2 root root    4096 Sep  4 18:41 tmp                          
drwxr-xr-x  10 root root    4096 Sep  3 03:33 usr                          
drwxr-xr-x  11 root root    4096 Sep  3 03:33 var   

没有tty的关闭stdin - / bin / bash无关

$ docker run -t ubuntu:14.04 /bin/bash
root@95904c21e5a5:/# ls -la
hello
this does nothing :(