2017-09-25 58 views
0

我目前正在开发一个.net核心项目与多个泊坞窗容器,2是.NET Core控制台应用程序,第三个是RabbitMQ的。显示多个泊坞窗容器交互式控制台在Visual Studio 2017年

我的目标是打开控制台窗口,我可以按回车键在泊坞窗容器运行控制台应用程序中的至少一个。

我通过右键点击我的控制台应用程序,然后点击“添加=>泊坞支持”添加泊坞窗支持。

这是我的搬运工,撰写文件:

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" 

这是我的搬运工,撰写-override.yml:运行服务2容器时 version: '3'

但Visual Studio中执行以下操作覆盖:

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需要得到一些控制台输入,所以我需要按“确认”键在交互式控制台。不幸的是我没有得到任何控制台窗口中打开 - 但我看到我的客服2的输出在调试,窗口,告诉我按回车 - 我只是不能按enter键。

关于this question,对于C++项目,在Debug-Menu中有一个所谓的“Linux控制台” - 但我没有这个按钮。我也试图通过安装“VISUAL C++为Linux开发”功能包括得到它,但它并没有帮助。

这是我调试菜单的样子: No Linux Console button 任何想法如何,我可以打开控制台窗口来控制我的搬运工,容器内的应用程序?

就像注意事项:等待输入的应用程序仅用于开发目的,因为它将命令发送到RabbitMQ管道而不使用Web前端。这将有可能在Docker之外开始,但它会破坏“按下一个按钮来运行它们”(并且不设置多个启动项目)的舒适度,并且会添加码头和非码头组件的混合物我的解决方案

+0

哪种服务正在等待这种情况下的输入? 'service1'或'service2'? –

+0

它是Service2。我也尝试在docker-compose文件中用Service2交换Service1,但没有取得任何成功。 – Compufreak

回答

1

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

你需要做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不支持采取​​从标准输入和将它传递给容器,所以你无法从调试控制台继续会话。您需要运行另一个终端并运行

docker attach <foldername>_service2_1 

基本上您需要提供容器的名称或ID。然后你按下输入容器将会继续进一步

+0

感谢这个答案,不幸的是,它似乎没有与Visual Studio调试器一起工作,因为它将'entrypoint:tail -f/dev/null'放入docker-compose文件中,并通过注入某种类型来启动该过程的命令导入到docker-container中,因此docker attach可能会抓取尾部-f/dev/null而不是我的应用程序:/ – Compufreak

+0

您是否也可以在问题中发布override yml? –

+0

我的override.yml只包含'version:3',我想你是要求一个Visual Studio使用的。我将Visual Studio的Docker-Output添加到我的问题中,它应该包含您要求的内容。 – Compufreak