用于分离模式的docker compose
我有以下docker命令来运行容器用于分离模式的docker compose,docker,docker-compose,Docker,Docker Compose,我有以下docker命令来运行容器 docker run -d --name test -v /etc/hadoop/conf:/etc/hadoop/conf -v /usr/lib/python2.7/dist-packages/hdinsight_common:/usr/lib/python2.7/dist-packages/hdinsight_common -v /etc/hive/conf/:/etc/hive/conf/ -v /etc/tez/conf/:/etc/tez/conf
docker run -d --name test -v /etc/hadoop/conf:/etc/hadoop/conf -v /usr/lib/python2.7/dist-packages/hdinsight_common:/usr/lib/python2.7/dist-packages/hdinsight_common -v /etc/hive/conf/:/etc/hive/conf/ -v /etc/tez/conf/:/etc/tez/conf/ -v /usr/hdp/2.4.2.0-258/sqoop/lib/:/usr/hdp/2.4.2.0-258/sqoop/lib/ -i -t hdinsight /bin/bash
这太复杂了,所以我试着像这样创建docker compose文件
version: '2'
services:
hdinsight:
image: hdinsight
container_name: ABC
volumes:
- /etc/hadoop/conf:/etc/hadoop/conf
- /usr/lib/python2.7/dist-packages/hdinsight_common:/usr/lib/python2.7/dist-packages/hdinsight_common
- /etc/hive/conf/:/etc/hive/conf/
- /etc/tez/conf/:/etc/tez/conf/
- /usr/hdp/2.4.2.0-258/sqoop/lib/:/usr/hdp/2.4.2.0-258/sqoop/lib/
entrypoint:
- bash
labels:
- "HDInsight client VM"
但我不确定从我最初的docker run命令中传递-d
,-I
&-t
鞭子的位置
我是这样运行docker compose的
docker-compose -f docker-compose.yml run hdinsight
有人能给我指一下这里的正确方向吗
第一次回答后更新
我试图运行
docker compose up-d
root@abc-docker:~/ubuntu# docker-compose up -d
Creating ABC
root@sbd-docker:~/ubuntu# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ffa4c359abf7 hdinsight "/bin/bash" 5 seconds ago Exited (0) 5 seconds ago ABC
root@sbd-docker:~/ubuntu#
不知道为什么它处于退出状态
有什么想法吗
谢谢您应该浏览一下撰写文件 大多数docker运行命令都有一个compose等效命令,它们都应该列在那里 背景标志-d在run或up之后出现 tty标志-t和交互式标志-i在docker compose运行时不是必需的。您可以使用-t将tty添加到compose文件中的单个容器中,但不能使用交互模式,因为您可能一次启动多个容器,并且无法与它们全部交互
根据你的情况,你使用的命令应该是有效的。如果在run命令后添加-d,它将在后台运行。但我建议使用up而不是run,因为它只会启动文件中的所有容器,而不必指定hdinsight。今天我面临同样的问题,下面是我如何管理的 我在“docker compose.yml”文件中添加了tty:truekay值&标准打开:true键值,如下所示,我确信它将在分离模式下运行,也可以与控制台交互 从文件中
Usage: up [options] [--scale SERVICE=NUM...] [SERVICE...]
Options:
-d, --detach Detached mode: Run containers in the background,
print new container names. Incompatible with
--abort-on-container-exit.
命令应该是
docker-compose up -d
正如Anand Suthar所说,您必须使用
tty:true
和stdin\u open:true
。下面是一个简单的例子:
version: "3"
services:
alpine1:
image: alpine
tty: true
stdin_open: true
首先:
docker-compose up -d
用以下材料连接到容器:
docker attach 268bcfb650fb
并使用
^p^Q
docker compose up-d
分离您提供的入口点
执行bash
,bash
要求运行交互式会话。执行docker compose up-d
启动容器非交互式,因此bash
立即退出。如果需要交互式会话,请执行docker compose run hdinsight
。Pit是正确的。抱歉,我的回答不符合您尝试以交互方式运行的事实。Up不能做到这一点。我也在努力使用docker compose,似乎我可以使用docker compose run
与tty交互运行一些东西,它工作得很好,但如果我用-d分离它,就不会创建tty。为了进行比较,docker run-dti image/bin/bash
确实创建了一个tty,我可以稍后附加它。我确实在docker-compose.yaml文件中指定了tty:true
。所以,当使用-d时,这个答案似乎是无效的,或者我做错了什么?看起来你是对的。当docker compose使用-d运行容器时,它不会创建tty,也不会保持bash运行,因此容器停止。奇怪的是,类似的命令之间会有如此大的差异。这个答案完全是错误的。请参阅Ortomala和Anand的其他答案。正确答案是tty:true和stdin_open:trueI必须使用docker compose的某个奇怪版本(1.24.0,构建0aa5906),因为“-d”选项不存在,docker compose-d up
nothing@andrej我认为-d必须放在'up'后面,因为选项终于放好了
docker attach 268bcfb650fb