2017-09-25 28 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