我在后台运行一个容器
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) 这个选项到底是做什么的?我一直在读TTY,但我仍然感到困惑.我玩的没有-t
和只是-i
,似乎期望用户输入的程序抛出错误没有-t
.为什么启用伪TTY很重要?
编辑:
有人标记了这个问题的重复项,但它根本没有解释底层机制。
但相比之下,这个堆栈溢出解决了我在 Case I 中的困惑,但没有解决 Case II。
我是 docker 的新手,我对 --interactive、--attach 标志的使用以及所涉及的概念感到困惑
我将在 docker hub 中使用busybox来展示我的困惑。
案例一:
当我使用以下命令运行容器时。docker run --interactive --tty busybox sh
根据该文档, --interactive 标志用于
即使未连接,也保持 STDIN 打开
我不明白即使不附着是什么意思,附着什么?
情况二:然后我退出容器并尝试使用
docker start --attach abdd796820b1
.
终端似乎也接受输入,但是当我输入 ls 或 echo 时,它没有给出响应。
--attach 标志做了什么?
我经常使用这些命令行选项,-i
以及-t
在使用我想要与之交互的容器时。
-i, --stdin=false: Pass stdin to the container
-t, --tty=false: Stdin is a TTY
Run Code Online (Sandbox Code Playgroud)
这些如何使容器具有交互性?