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

docker py在执行/bin/bash时出现问题,docker,dockerpy,Docker,Dockerpy,我有一个docker镜像,它是从ubuntu基础镜像构建的,安装了一些软件 我有一个启动脚本,如下所示 #!/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', versio

我有一个docker镜像,它是从ubuntu基础镜像构建的,安装了一些软件

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

#!/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桌面、Ubuntu14.04.1LTS和DockerPy版本1.10上测试它时,它工作得很好,我可以启动多个(比如3个)。它将启动docker,我可以稍后进行docker连接并在终端上工作

现在,我将测试环境迁移到一个Ubuntu服务器版本,该版本包含Ubuntu 14.04.1 LTS和docker py版本1.12

我看到的问题是,当我使用相同的脚本并尝试启动3个Docker时,在启动process1和Process2作为后台进程之后,所有Docker都会退出。看起来好像根本没有执行/bin/bash

如果我执行与“docker run-t-i p14/startup.sh-->相同的docker映像,那么一切都会恢复正常。docker会正确启动,我可以访问终端

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

有没有人有类似的问题…有没有关于如何调试这个问题的想法…或者有没有关于修复的指针

谢谢,
Kiran

不同之处在于,当您使用
docker run-t-ip14/startup.sh
运行docker映像时,您处于打开的
stdin
-i
)模式,而在
docker py
配置中设置了
stdin\u open=False
tty=False

由于docker容器没有
tty
,并且无法从
stdin
获取任何输入,因此对
/bin/bash
的调用与此无关,因此退出时代码为0

你自己试试吧:

带有tty的开放式stdin

$ 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的开放式标准输入法(即,没有提示,但您仍然可以通过标准输入法发送命令)

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

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

$ docker run ubuntu:14.04 /bin/bash
$ 

这太棒了。我试过了,你完全正确。:)我仍然有一个问题。在启用stdin_open和tty为True后,使用相同的startup.sh,现在当我通过docker.py启动我的dockers时,它启动良好,我也可以拥有终端。然而令人惊讶的是,第一个过程”/usr/local/sbin/process1-d“自动退出。但流程2没有这样的问题。另外,当我使用相同的启动脚本手动启动docker时,进程1和进程都运行良好,并且不存在任何内容。我不知道为什么这种行为又发生了?我得到了一些线索。当我从docker py启动docket时,进程1正在崩溃。当我手动实例化它时,它可以正常工作。仍然不知道为什么。由于不知道进程1的功能,我真的无法再帮上忙了,对不起。
$ docker run -t ubuntu:14.04 /bin/bash
root@95904c21e5a5:/# ls -la
hello
this does nothing :(
$ docker run ubuntu:14.04 /bin/bash
$