我目前正在开发一个带有多个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的样子:
我有什么想法可以打开一个控制台窗口来控制我的docker-container中的应用程序吗?
正如旁注:等待输入的应用程序仅用于开发目的,因为它在不使用Web前端的情况下将命令发送到RabbitMQ管道。可以在docker之外启动它,但它会破坏“通过按下一个按钮来运行它们”的舒适性(并且不设置多个启动项目)并且会添加docker和非docker-components的混合我的解决方案。
答案 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键,容器将继续进一步