我有一个在前台运行Apache服务的容器.我希望能够从另一个shell访问容器,以便在其中"查找"并检查文件.目前,如果我附加到容器,我只是看着Apache守护进程,无法运行任何命令.
是否可以将另一个tty附加到正在运行的容器上?可能,我可以利用Docker实际上只是环绕LXC容器这一事实?我试过sudo lxc-console -n [container-id] -t [1-4]但似乎只有一个tty可用,那就是运行apache守护进程的tty.也许有一种方法可以在构建期间启用多个lxc控制台?
如果可能的话,我宁愿不使用openssh服务配置和构建容器.
我创建了一个容器,-d因此它不是交互式的.
docker run -d shykes/pybuilder bin/bash
Run Code Online (Sandbox Code Playgroud)
我看到容器已退出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6c45e8cc5f0 shykes/pybuilder:latest "bin/bash" 41 minutes ago Exited (0) 2 seconds ago clever_bardeen
Run Code Online (Sandbox Code Playgroud)
现在我想在机器上运行偶尔的命令并退出.只是为了得到答复.
我试着启动机器.我试着附上.我以为我可以run用容器打电话,但似乎不允许这样做.使用start似乎只是运行然后快速存在.
退出后我想回到交互模式.
我试过了:
docker attach d6c45e8cc5f0
Run Code Online (Sandbox Code Playgroud)
但我得到:
2014/10/01 22:33:34 You cannot attach to a stopped container, start it first
Run Code Online (Sandbox Code Playgroud)
但是,如果我开始它,它无论如何都会退出.抓住22.我无法获胜.
我可以附加到一个docker进程但是Ctrl+ c不能从它分离.exit基本上停止了这个过程.
建议的工作流程是什么,让流程运行,偶尔附加到它上进行一些更改,然后分离?
我天真地期望这个命令在一个正在运行的容器中运行一个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登录吗?
我在后台运行一个容器
docker run -d --name hadoop h_Service
Run Code Online (Sandbox Code Playgroud)
它快速退出.但如果我在前台运行,它运行正常.我使用了检查日志
docker logs hadoop
Run Code Online (Sandbox Code Playgroud)
没有错误.有任何想法吗?
DOCKERFILE
FROM java_ubuntu_new
RUN wget http://archive.cloudera.com/cdh4/one-click-install/precise/amd64/cdh4-repository_1.0_all.deb
RUN dpkg -i cdh4-repository_1.0_all.deb
RUN curl -s http://archive.cloudera.com/cdh4/ubuntu/precise/amd64/cdh/archive.key | apt-key add -
RUN apt-get update
RUN apt-get install -y hadoop-0.20-conf-pseudo
RUN dpkg -L hadoop-0.20-conf-pseudo
USER hdfs
RUN hdfs namenode -format
USER root
RUN apt-get install -y sudo
ADD . /usr/local/
RUN chmod 777 /usr/local/start-all.sh
CMD ["/usr/local/start-all.sh"]
Run Code Online (Sandbox Code Playgroud)
start-all.sh
#!/usr/bin/env bash
/etc/init.d/hadoop-hdfs-namenode start
/etc/init.d/hadoop-hdfs-datanode start
/etc/init.d/hadoop-hdfs-secondarynamenode start
/etc/init.d/hadoop-0.20-mapreduce-tasktracker start
sudo -u hdfs hadoop fs …Run Code Online (Sandbox Code Playgroud)