在Visual Studio 2017中显示多个Docker容器的交互式控制台

我目前正在开发一个带有多个docker容器的.Net Core-project,其中两个是.NET Core Console应用程序,第三个是RabbitMQ。

我的目标是打开一个控制台窗口,在那里我可以按下至less一个Docker容器中运行的控制台应用程序的input。

我通过右键单击我的控制台应用程序并单击“添加=> Docker支持”来添加docker-support。

这是我的docker-compose-file:

version: '3' services: service1: image: service1 build: context: ./Service1 dockerfile: Dockerfile links: - "rabbitmq:rabbit" service2: image: service2 build: context: ./Service2 dockerfile: Dockerfile links: - "rabbitmq:rabbit" rabbitmq: image: "rabbitmq:3-management" ports: - "8082:15672" - "5672:5672" 

这是我的docker-compose-override.yml: version: '3'

但是,Visual Studio在运行Service2容器时会进行以下重写:

 Service2: build: args: source: obj/Docker/empty/ context: C:\Develop\vsts_tfs\Service2 dockerfile: Dockerfile entrypoint: tail -f /dev/null environment: NUGET_FALLBACK_PACKAGES: /root/.nuget/fallbackpackages image: service2:dev labels: com.microsoft.visualstudio.debuggee.arguments: ' --additionalProbingPath /root/.nuget/packages --additionalProbingPath /root/.nuget/fallbackpackages bin/Debug/netcoreapp2.0/Service2.dll' com.microsoft.visualstudio.debuggee.killprogram: /bin/bash -c "if PID=$(pidof -x dotnet); then kill $PID; fi" com.microsoft.visualstudio.debuggee.program: dotnet com.microsoft.visualstudio.debuggee.workingdirectory: /app links: - rabbitmq:rabbit volumes: - C:\Develop\vsts_tfs\Service2:/app:rw - C:\Users\MYUSER\vsdbg:/remote_debugger:ro - C:\Program Files\dotnet\sdk\NuGetFallbackFolder:/root/.nuget/fallbackpackages:ro - C:\Users\MYUSER\.nuget\packages:/root/.nuget/packages:ro 

我的服务2需要获得一些控制台input,所以我需要在交互式控制台中按“进入”。 不幸的是,我没有得到任何控制台窗口打开 – 但我看到我的Service2的输出在debugging窗口告诉我按回车 – 我只是不能按Enter键。

关于这个问题 ,对于C ++项目来说,Debug-Menu中有一个所谓的“Linux控制台” – 但是我没有这个button。 我也尝试通过安装“Visual C ++ for Linux开发”-Feature来获得它,但它没有帮助。

这是我的debugging菜单的样子: 没有Linux控制台按钮 任何想法如何打开一个控制台窗口来控制我的docker集装箱内的应用程序?

正如旁注 :等待input的应用程序仅用于开发目的,因为它将命令发送到RabbitMQpipe道而不使用Web前端。 这将有可能在Docker外部启动,但是它会破坏“按下一个button来运行它们”(并且不设置多个启动项目)的舒适度,并且会添加docker和非docker组件的混合物我的解决scheme

PS:现在使用注释作为答案,因为我需要格式化

你需要对你的docker-compose做2个修改

 version: '3' services: service1: image: service1 build: context: ./Service1 dockerfile: Dockerfile links: - "rabbitmq:rabbit" service2: image: service2 build: context: ./Service2 dockerfile: Dockerfile links: - "rabbitmq:rabbit" stdin_open: true tty: true rabbitmq: image: "rabbitmq:3-management" ports: - "8082:15672" - "5672:5672" 

现在, docker-compose不支持从标准input接收input并将其传递给容器,因此无法从debugging控制台继续会话。 您需要运行另一个terminal并运行

 docker attach <foldername>_service2_1 

基本上你需要给容器的名称或ID。 然后你按下input该容器将继续进一步