请教各位达人一个关于docker的问题哈。我想在docker run的时候,用-d参数运行/bin/bash,然后让这个bash一直跑着,我要用的时候就docker attach上去。但是我一跑docker run -d .... /bin/bash,这个容器就运行结束停下来了。这是为毛啊,有啥解决方案没。。。
走同样的路,发现不同的人生
我自己也遇到这个问题。不过不同的时,我希望docker run的时候,可以让容器一直在后台运行,并允许我远程登陆进去操作。
我把文章拷贝过来了:ssh远程登陆一个容器
----内容开始-----
启动了一个容器之后,我们可能需要用ssh登陆进去进行一些操作。为达到此目的,有2点需要保证:
注意:以下示例是在ubuntu/13.10中完成的
首先确保镜像安装有openssh-server服务
openssh-server
# 官方镜像一般没有安装ssh服务端,so,需要安装一个 apt-get install openssh-server # 设置一个初始密码 passwd 123 ...
然后,提交镜像:
docker commit CONTAINER_ID NAME/VERSION
最后,运行镜像,并让生成的容器一直在后台运行:
# 第一个-d表示让容器在后台运行 # 末尾的-D表示启动ssh的daemon模式,不然容器启动后立刻就变为停止状态了 docker run -d NAME/VERSION /etc/init.d/ssh start -D
现在,便可以ssh登陆容器了。
# 查询容器IP docker inspect CONTAINER_ID | grep IP # 登入 ssh root@IP # 输入密码 123完成登陆 # 为保证安全,请即刻用passwd修改密码
docker run指定的命令如果不是那些一直挂起的命令(比如运行top,不断echo),就是会自动退出的。-d命令是设置detach为true,根据官方的文档,意思是让这个命令在后台运行,但并不是一直运行(我们在一个正常的Linux Terminal中运行/bin/bash,运行完了也就完了,不会一直挂着等待响应的,所以确实没办法用daemon方式来跑/bin/bash)。
docker run
top
echo
-d
/bin/bash
这个地方官方早期和现在的文档也确实有些前后不一致,现在是detach,早期的文档说指定-d以daemon方式来运行容器,可能存在一定的误解。
另外,如果你需要跑容器里的bash,直接运行docker run -i -t CONTAINER_NAME /bin/bash 就可以了,如果觉得参数比docker attach多,可以设置一个别名(alias)来解决:
docker run -i -t CONTAINER_NAME /bin/bash
alias dockerbash='docker run -i -t CONTAINER_ID /bin/bash'
设置好别名后,直接运行dockerbash就可以进入容器的bash了。
dockerbash
用supervisor就可以实现。而且可以同时启动多个服务。 先yum -y install supervisor 安装软件包,修改配置文件/etc/supervisord.conf 增加自己要启动的服务,如sshd 。
具体的话,可以参考这个文章:http://openstack.blog.163.com/blog/static/236387267201491734019283/
docker run --attach=stdin -d image bash,-d参数默认关闭了stdin。
建议在构建镜像的Dockerfile文件中加一句:CMD tail -f如果还有其他命令CMD 其他命令 && tail -f希望对你有所帮助
我自己也遇到这个问题。不过不同的时,我希望docker run的时候,可以让容器一直在后台运行,并允许我远程登陆进去操作。
我把文章拷贝过来了:ssh远程登陆一个容器
----内容开始-----
启动了一个容器之后,我们可能需要用ssh登陆进去进行一些操作。为达到此目的,有2点需要保证:
首先确保镜像安装有
openssh-server
服务然后,提交镜像:
最后,运行镜像,并让生成的容器一直在后台运行:
现在,便可以ssh登陆容器了。
docker run
指定的命令如果不是那些一直挂起的命令(比如运行top
,不断echo
),就是会自动退出的。-d
命令是设置detach为true,根据官方的文档,意思是让这个命令在后台运行,但并不是一直运行(我们在一个正常的Linux Terminal中运行/bin/bash
,运行完了也就完了,不会一直挂着等待响应的,所以确实没办法用daemon方式来跑/bin/bash
)。这个地方官方早期和现在的文档也确实有些前后不一致,现在是detach,早期的文档说指定-d以daemon方式来运行容器,可能存在一定的误解。
另外,如果你需要跑容器里的bash,直接运行
docker run -i -t CONTAINER_NAME /bin/bash
就可以了,如果觉得参数比docker attach多,可以设置一个别名(alias)来解决:设置好别名后,直接运行
dockerbash
就可以进入容器的bash了。用supervisor就可以实现。而且可以同时启动多个服务。
先yum -y install supervisor 安装软件包,修改配置文件/etc/supervisord.conf
增加自己要启动的服务,如sshd 。
具体的话,可以参考这个文章:http://openstack.blog.163.com/blog/static/236387267201491734019283/
docker run --attach=stdin -d image bash,-d参数默认关闭了stdin。
建议在构建镜像的Dockerfile文件中加一句:
CMD tail -f
如果还有其他命令
CMD 其他命令 && tail -f
希望对你有所帮助