我有一个基于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库时。
任何人都有任何类似的问题......关于如何调试此问题的任何想法......或修复的任何指针?
谢谢, 基兰
答案 0 :(得分:2)
当您使用{{1}运行泊坞窗图像时,您在tty
(-t
)模式下与开放式stdin
(-i
)不同之处您在docker run -t -i p14 /startup.sh
配置中同时设置了stdin_open=False
和tty=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 :(