docker-为分离模式撰写
docker-compose for Detached mode
我有以下 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 运行 命令
中传递 -d
、-i
和 -t
标志
我运行宁docker-这样写
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#
不知道为什么它处于 Exited
状态
有什么想法吗?
谢谢
您应该搜索 Compose 文件 docs。
大多数 docker 运行 命令都有一个 compose 等价物,它们都应该列在那里。
背景标志 -d 在 运行 或 up.
之后
不需要 tty 标志 -t 和交互式标志 -i 作为 docker-compose 运行 does this by default。您可以使用 -t 将 tty 添加到 compose 文件中的各个容器,但是您不能使用交互模式,因为您可能一次启动多个容器并且您无法与它们全部交互。
根据您的情况,您使用的命令应该可以正常工作。如果您在 运行 命令后添加 -d,它将在后台 运行。但我建议使用 up 而不是 运行,因为它只会启动文件中的所有容器,而不必指定 hdinsight .
今天我遇到了同样的问题,以下是我的处理方法。
I add tty: true kay value & stdin_open: true key value in 'docker-compose.yml' file as below and I am sure it will run in detach mode and one can also interact with console.
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"
tty: true
stdin_open: 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_open: true
。这是一个最小的例子:
version: "3"
services:
alpine1:
image: alpine
tty: true
stdin_open: true
开始于:
docker-compose up -d
附加到容器:
docker attach 268bcfb650fb
并与 ^P^Q
分离。
现在使用 profiles introduced in 1.28.0.
比尝试附加到现有容器更容易
这是一个基本示例,显示了 CLI 容器旁边的正常服务:
version: '3'
services:
db:
image: mariadb:10
environment:
- MARIADB_ROOT_PASSWORD=INSECURE
volumes:
- mariadb:/var/lib/mysql
ports:
- "3306:3306"
cli:
image: node:16
user: node
volumes:
- .:/app
environment:
- DATABASE_URL=mysql://root:INSECURE@db/prisma
working_dir: "/app"
stdin_open: true
tty: true
command: bash
profiles:
- cli
volumes:
mariadb:
运行宁docker-compose up -d
后,docker-compose run cli
会给你一个bashshell容器里面
对于更复杂的应用程序,请考虑覆盖入口点。在 nodejs 世界中,如果将其设置为 npx
,并保留命令未定义,则可以使用 docker-compose run npx ...
运行 任意 npx 命令。对于始终非交互式的常见任务,您可以在保留配置文件集的同时删除 std_open
和 tty
行。
我有以下 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 运行 命令
中传递-d
、-i
和 -t
标志
我运行宁docker-这样写
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#
不知道为什么它处于 Exited
状态
有什么想法吗?
谢谢
您应该搜索 Compose 文件 docs。
大多数 docker 运行 命令都有一个 compose 等价物,它们都应该列在那里。
背景标志 -d 在 运行 或 up.
之后不需要 tty 标志 -t 和交互式标志 -i 作为 docker-compose 运行 does this by default。您可以使用 -t 将 tty 添加到 compose 文件中的各个容器,但是您不能使用交互模式,因为您可能一次启动多个容器并且您无法与它们全部交互。
根据您的情况,您使用的命令应该可以正常工作。如果您在 运行 命令后添加 -d,它将在后台 运行。但我建议使用 up 而不是 运行,因为它只会启动文件中的所有容器,而不必指定 hdinsight .
今天我遇到了同样的问题,以下是我的处理方法。
I add tty: true kay value & stdin_open: true key value in 'docker-compose.yml' file as below and I am sure it will run in detach mode and one can also interact with console.
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"
tty: true
stdin_open: 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_open: true
。这是一个最小的例子:
version: "3"
services:
alpine1:
image: alpine
tty: true
stdin_open: true
开始于:
docker-compose up -d
附加到容器:
docker attach 268bcfb650fb
并与 ^P^Q
分离。
现在使用 profiles introduced in 1.28.0.
比尝试附加到现有容器更容易这是一个基本示例,显示了 CLI 容器旁边的正常服务:
version: '3'
services:
db:
image: mariadb:10
environment:
- MARIADB_ROOT_PASSWORD=INSECURE
volumes:
- mariadb:/var/lib/mysql
ports:
- "3306:3306"
cli:
image: node:16
user: node
volumes:
- .:/app
environment:
- DATABASE_URL=mysql://root:INSECURE@db/prisma
working_dir: "/app"
stdin_open: true
tty: true
command: bash
profiles:
- cli
volumes:
mariadb:
运行宁docker-compose up -d
后,docker-compose run cli
会给你一个bashshell容器里面
对于更复杂的应用程序,请考虑覆盖入口点。在 nodejs 世界中,如果将其设置为 npx
,并保留命令未定义,则可以使用 docker-compose run npx ...
运行 任意 npx 命令。对于始终非交互式的常见任务,您可以在保留配置文件集的同时删除 std_open
和 tty
行。