我天真地期望这个命令在一个正在运行的容器中运行一个bash shell:
docker run "id of running container" /bin/bash
Run Code Online (Sandbox Code Playgroud)
它看起来不可能,我得到错误:
2013/07/27 20:00:24 Internal server error: 404 trying to fetch remote history for 27d757283842
Run Code Online (Sandbox Code Playgroud)
所以,如果我想在一个正在运行的容器中运行bash shell(例如用于诊断目的)
我必须在其中运行SSH服务器并通过ssh登录吗?
Mic*_*arf 610
使用docker 1.3,有一个新命令docker exec.这允许您输入正在运行的泊坞窗:
docker exec -it "id of running container" bash
Run Code Online (Sandbox Code Playgroud)
cre*_*ack 278
编辑:现在你可以使用docker exec -it "id of running container" bash(doc)
以前,这个问题的答案是:
如果您真的必须并且处于调试环境中,则可以执行此操作:sudo lxc-attach -n <ID>
请注意,id必须是完整的(docker ps -notrunc).
但是,我强烈建议不要这样做.
notice:-notrunc已弃用,--no-trunc很快就会被替换.
max*_*lec 14
做就是了
docker attach container_name
Run Code Online (Sandbox Code Playgroud)
正如在评论中提到,从容器分离不停止,键入Ctrlp然后Ctrlq.
Teu*_*ndo 10
由于事情正在变化,目前推荐的访问正在运行的容器的方法正在使用nsenter.
您可以在此github存储库中找到更多信息.但一般来说你可以像这样使用nsenter:
PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
nsenter --target $PID --mount --uts --ipc --net --pid
Run Code Online (Sandbox Code Playgroud)
或者您可以使用包装器docker-enter:
docker-enter <container_name_or_ID>
Run Code Online (Sandbox Code Playgroud)
关于这个主题的一个很好的解释可以在JérômePetazzoni的博客文章中找到: 为什么你不需要在你的docker容器中运行sshd
首先,你无法运行
docker run "existing container" command
Run Code Online (Sandbox Code Playgroud)
因为这个命令期望一个图像而不是一个容器,它无论如何都会导致产生一个新的容器(所以不是你想看的那个)
我同意这样的事实:对于docker,我们应该以不同的方式进行思考(所以你应该找到方法,这样你就不需要登录容器了),但我仍觉得它很有用,这就是我的工作方式周围.
我在DEAMON模式下通过主管运行我的命令.
然后我执行我所说docker_loop.sh
的内容就是这样:
#!/bin/bash
/usr/bin/supervisord
/usr/bin/supervisorctl
while ( true )
do
echo "Detach with Ctrl-p Ctrl-q. Dropping to shell"
sleep 1
/bin/bash
done
Run Code Online (Sandbox Code Playgroud)
它的作用是允许您"附加"到容器并显示supervisorctl用于停止/启动/重新启动和检查日志的界面.如果这还不够,你可以Ctrl+D,你会掉进一个外壳,让你可以看到它就像是一个普通的系统.
请注意,该系统不如没有外壳的容器那么安全,因此请采取所有必要步骤来保护容器.
留意这个拉取请求:https : //github.com/docker/docker/pull/7409
它实现了即将到来的docker exec <container_id> <command>实用程序。如果可用,应该可以例如在正在运行的容器内启动和停止ssh服务。
还nsinit可以执行以下操作:“ nsinit提供了一种方便的方法来访问正在运行的容器的命名空间中的shell”,但是看起来很难运行。
https://gist.github.com/ubergarm/ed42ebbea293350c30a6
| 归档时间: |
|
| 查看次数: |
231113 次 |
| 最近记录: |