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

我有一个从Ubuntu的基础镜像build立的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) 

这工作得很好,我可以启动多个(比如3),当我在Ubuntu桌面,Ubuntu 14.04.1 LTS和docker-py版本的1.10上testing这个。 它将启动docker,我可以稍后做docker工作,并在docker上工作。

现在我把我的testing环境移到Ubuntu 14.04.1 LTS和docker-py版本为1.12的Ubuntu Server版本上。

我看到的问题是,当我使用相同的脚本,并尝试启动3泊坞窗,启动过程1和过程2作为后台进程后,所有的docker只是退出。 看起来好像/ bin / bash根本不执行。

如果我执行与“docker运行-t -i p14 /startup.sh – >”相同的docker图像,那么一切都很好。docker启动适当,我得到terminal访问。

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

任何人有任何类似的问题…任何想法如何debugging这个问题…或修复的任何指针?

谢谢,基兰

不同的是,当你用docker run -t -i p14 /startup.sh运行你的docker run -t -i p14 /startup.sh镜像的时候,你在tty-t )模式下打开stdin-i ),而你同时设置了stdin_open=Falsetty=False在你的docker-pyconfiguration中是错误的。

因为你的docker容器没有tty ,不能从stdininput接受任何input,所以你对/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:/# 

一个打开的stdin没有tty(即,没有提示,但你仍然可以通过stdin发送命令)

 $ 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 

用ttyclosuresstdin(你可以看到提示符,但是你不能input任何命令)

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

没有tty – / bin / bash的closuresstdin没有任何用处

 $ docker run ubuntu:14.04 /bin/bash $