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