当前位置: 首页 > 知识库问答 >
问题:

为什么docker-compose不能交互工作?

后源
2023-03-14

我有一个docker-compose文件:

version: "2"

services: 
    test:
        image: python:3
        stdin_open: true
        tty: true
        container_name: test_c
$ sudo docker-compose up 
Recreating test_c
Attaching to test_c
test_c  | Python 3.8.2 (default, Feb 26 2020, 14:58:38) 
test_c  | [GCC 8.3.0] on linux
test_c  | Type "help", "copyright", "credits" or "license" for more information.
^CGracefully stopping... (press Ctrl+C again to force)
Stopping test_c ... 
Killing test_c ... done
$ sudo docker-compose up -d
$ sudo docker attach test_c
>>> 

但我想知道为什么不和Docker一起工作--组成。

共有1个答案

濮阳和泰
2023-03-14

这里发生的是,您生成了一个Python实例,然后不为该命令提供任何参数。Docker容器本质上是对来自主机操作系统内核的单个进程的文件系统和资源的抽象。

因此,在本例中,您所调用的图像只需简单地创建,然后调用Python。如果在计算机的shell中调用Python会发生什么?它将您转储到交互式shell中,然后可以向其提交命令。

嗯,那没多大意义。为什么要调用一个命令,它只是在一个无法与其他任何东西通信的命名空间环境中旋转一个shell?使用Docker的真正方法是将参数传递给容器映像。以便当Docker启动Python进程时,它可以传递一个参数来执行某些操作。例如,通过DockerFile运行卷装入或复制的应用程序

当Docker运行Python命令时,这种情况不会自动发生,原因是docker-compose upDocker run不会使您进入交互式环境。它只是调用容器中的entrypoint命令。要做到这一点,您必须在容器中调用一个附加命令。在本例中,是一个shell。大多数容器操作系统上都安装了shbash之类的东西。我怀疑Python会这样做。但是,您可以使用exec命令测试它,如下所示:

docker-compose up -d
docker exec -it test_c

让我知道,如果你需要任何额外的信息或支持这个问题。总是很乐意帮助您开始使用Docker。这是一项很棒的技术!

 类似资料:
  • 因此,我正在运行一个脚本,该脚本调用: 在ubuntu上运行时似乎工作良好,但当我使用Git Bash在Windows上运行时,会出现以下错误:

  • 有没有办法只使用Docker Compose在容器中启动一个交互式shell?我在我的docker-compose.yml: 当我使用docker-compose up启动这个容器时,它会立即退出。是否有任何标志可以添加到命令中,或者作为的附加选项来启动交互式shell? 我知道有本机docker命令选项来实现这一点,只是好奇是否也可以只使用docker Compose。

  • 我正在尝试使用AdminMongo访问docker上的mongo数据库。 这是我的 当我执行时,adminmongo还会返回以下内容: 以下是给我的回复:

  • 我正在使用docker compose创建一个react应用程序。Dockerfile文件和docker文件组成。yml已创建,但生成应用程序时出错。 Dockerfile docker-compose.yml 文件夹体系结构是: docker撰写。yml docker应用程序/软件包。json应用程序/src/ 执行docker compose up-d--build命令时,会出现以下错误。 构

  • 问题内容: 我在MacOSX上使用Docker(带有Boot2Docker)。 我可以从Docker Hub运行映像。 但是,当我尝试像这样运行自己的映像之一时: 要么 要么 我得到: 我猜它找不到在容器中执行的bash二进制文件,但是为什么呢? 基本图像是 谢谢你的帮助。 阿什莉 问题答案: 您的图片基于不带bash外壳的busybox。它的确有外壳。 所以这不起作用: 但这确实是: 由于您的入

  • 使用scandir()函数时,我收到以下php警告: Scandir无法打开目录:公共html/page2中不允许操作。php在线3 第2页。php 我想使用这个功能来打印我的根文件夹的文件和子目录,但它不工作。 有人知道怎么修吗?