如何让docker以daemon方式运行/bin/bash
怪我咯
怪我咯 2017-04-21 10:55:35
0
5
912

请教各位达人一个关于docker的问题哈。我想在docker run的时候,用-d参数运行/bin/bash,然后让这个bash一直跑着,我要用的时候就docker attach上去。但是我一跑docker run -d .... /bin/bash,这个容器就运行结束停下来了。这是为毛啊,有啥解决方案没。。。

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回覆(5)
PHPzhong

我自己也遇到這個問題。不過不同的時,我希望docker run的時候,可以讓容器一直在後台運行,並允許我遠端登陸進去操作。

我把文章拷貝過來了:ssh遠端登陸一個容器

----內容開始-----

啟動了一個容器之後,我們可能需要用ssh登陸進去進行一些操作。為達到此目的,有2點需要保證:

  • 容器必須處於運作狀態。
  • openssh-server處於啟動狀態。
注意:以下示例是在ubuntu/13.10中完成的

首先確保鏡像安裝有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)。

這個地方官方早期和現在的文檔也確實有些前後不一致,現在是detach,早期的文檔說指定-d以daemon方式來運行容器,可能存在一定的誤解。

另外,如果你需要跑容器裡的bash,直接運行docker run -i -t CONTAINER_NAME /bin/bash 就可以了,如果覺得參數比docker attach多,可以設定一個別名(alias)來解決:

alias dockerbash='docker run -i -t CONTAINER_ID /bin/bash'

設定好別名後,直接運作dockerbash就可以進入容器的bash了。

PHPzhong

用supervisor就可以實現。而且可以同時啟動多個服務。
先yum -y install supervisor 安裝軟體包,修改設定檔/etc/supervisord.conf
增加自己要啟動的服務,如sshd 。

具體的話,可以參考這篇文章:http://openstack.blog.163.com/blog/static/236387267201491734019283/

Peter_Zhu

docker run --attach=stdin -d image bash,-d參數預設關閉了stdin。

刘奇

建議在建置映像的Dockerfile檔案中加一句:
CMD tail -f
如果還有其他指令
CMD 其他指令 && tail -f
希望對你有幫助

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板