如何在Docker Compose中使用-it运行容器?

18

docker run -idt ubuntu:16.04之后,我们可以使用docker ps查看容器是否启动。

但如果接下来使用Docker Compose,并运行docker-compose up,我们会发现docker ps找不到容器,而从docker ps -a中可以看到容器已经退出了。

version: '2'
services:
  me:
    image: 'ubuntu:16.04'

问题:我们如何使用Docker Compose实现-idt

2个回答

23

Ubuntu镜像的默认CMD是Bash:

# overwrite this with 'CMD []' in a dependent Dockerfile
CMD ["/bin/bash"]

从"使用Docker Compose进行交互式Shell"中,看看是否添加以下行会有帮助:

stdin_open: true
tty: true
在docker-compose文件中,我们可以添加command标签作为。
command: /bin/bash

这篇文章很有用,谢谢。但它涉及到 docker exec -ti <container name> /bin/bash,在 docker compose 中还有其他 -d 参数吗?你知道,现在 docker compose up 没有退出。 - user9595751
只要容器没有退出,您可以认为它在后台运行。您需要使用docker exec来实际使用默认的bash CMD。 - VonC

5

docker-compose run {image} /bin/bash会自动进入交互模式。

对于docker-compose up,您不应该以交互方式运行它,而是作为服务运行。

您也可以使用docker-compose up命令,然后使用docker ps查找它们的映像,并在其中执行。如果您的映像正在加载守护程序(服务器),则此方法可行;如果您的映像执行脚本然后退出,则它也将退出映像,使其无法进入。请参阅此问题以了解如何执行此操作。


当使用idt时,命令会立即完成而不让我进入任何交互式bash,但容器仍然存活。我不想执行任何容器,只想让这个容器保持存活状态而不退出。 - user9595751
Docker 不能没有其进程而存在,您需要在后台运行一个进程,否则 Docker 将会杀死操作系统。 - Rainb
执行 docker run -idt ubuntu:16.04 后,容器是否仍然处于运行状态? - user9595751

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接