用于分离模式的docker compose

用于分离模式的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命令来运行容器

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