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

时间:2017-09-25 11:13:49

标签: .net docker visual-studio-2017

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

我的目标是打开一个控制台窗口,我可以在其中输入至少一个在docker容器中运行的控制台应用程序。

我通过右键单击我的控制台应用程序并单击“添加=> 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

我的Service2需要获得一些控制台输入,所以我需要在交互式控制台中按“enter”。不幸的是我没有打开任何控制台窗口 - 但是我在Debug-Window中看到我的Service2输出告诉我按回车 - 我就是不能按回车键。

关于this question,对于C ++项目,调试菜单中有一个所谓的“Linux控制台” - 但我没有这个按钮。我也尝试通过安装“Visual C ++ for Linux-Development”-Feature来获得它,但它没有帮助。

这是我的Debug-Menu的样子: No Linux Console button 我有什么想法可以打开一个控制台窗口来控制我的docker-container中的应用程序吗?

正如旁注:等待输入的应用程序仅用于开发目的,因为它在不使用Web前端的情况下将命令发送到RabbitMQ管道。可以在docker之外启动它,但它会破坏“通过按下一个按钮来运行它们”的舒适性(并且不设置多个启动项目)并且会添加docker和非docker-components的混合我的解决方案。

1 个答案:

答案 0 :(得分:2)

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不支持从stdin获取输入并将其传递给容器,因此无法从调试控制台继续会话。您需要运行另一个终端并运行

docker attach <foldername>_service2_1

基本上你需要给出容器的名称或id。然后按Enter键,容器将继续进一步