【问题标题】:How can I interactively run a dotnet core console application inside of a docker container如何在 docker 容器内以交互方式运行 dotnet 核心控制台应用程序
【发布时间】:2020-06-03 11:39:33
【问题描述】:

我从 Visual Studio 2019 创建了以下简单的 dotnet 核心控制台应用程序。

Console.WriteLine("Hello World!");
var readText = Console.ReadLine();
Console.WriteLine(readText);

当我按下 F5 时,程序会在 Console.ReadLine 处等待我,直到我输入一些文本。当我输入一些文本并按回车键时,相同的文本会显示给我。

现在我为这个控制台项目添加了 docker 支持。我已经在另一个 so question 中编写了分步说明以添加 docker 支持。

添加 docker 支持后,在命令提示符中,导航到 docker-compose 文件所在的文件夹并发出命令,

docker-compose up

应用程序运行,打印 Hello World!。然后显然它停止并等待我输入一些文本。但是当我输入文本并按下回车键时,什么也没有发生。似乎我在控制台上提供的输入没有传达给在容器内运行的应用程序。

我错过了什么?为什么在容器内运行的应用程序没有接受我的输入?只需要 Ctrl+C 之后容器本身就会退出。

注意,如果容器立即退出,那么您必须将以下内容添加到 docker-compose 文件中,如同一 so question's answer 中所述。这将防止容器立即退出。

stdin_open: true
tty: true

【问题讨论】:

    标签: docker .net-core docker-compose


    【解决方案1】:

    默认启用标准输入和 TTY。

    而不是docker-compose up运行

    docker-compose run <service name from docker-compose.yml file>

    从 docker 文档粘贴:

    https://docs.docker.com/compose/reference/run/

    针对服务运行一次性命令。例如,以下命令启动 Web 服务并运行 bash 作为其命令。

    docker-compose 运行 web bash

    两个区别:

    首先,run 传递的命令会覆盖服务配置中定义的命令。例如,如果 web 服务配置是用 bash 启动的,那么 docker-compose run web python app.py 会用 python app.py 覆盖它。

    第二个区别是 docker-compose run 命令不会创建服务配置中指定的任何端口。这可以防止端口与已经打开的端口发生冲突。如果您确实希望创建服务的端口并将其映射到主机,请指定 --service-ports 标志:

    【讨论】:

    • 伙计..,不敢相信自己。它的工作。如果您能多解释一下为什么“向上”不起作用并且它起作用。
    • 几个观察结果。 1、程序退出后容器退出(停止)。 2. 当我再次运行命令(docker-compose run dokconsoleapp) 时,会创建一个新容器。我可以在 docker 桌面仪表板上看到它们。但是使用 up 命令,同一个容器会再次启动(它不会与我交互)。无论如何谢谢!
    猜你喜欢
    • 2020-07-16
    • 2020-11-07
    • 1970-01-01
    • 2019-06-17
    • 2018-05-14
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多