【问题标题】:Can i add a port binding to a docker container while debugging in Visual Studio?在 Visual Studio 中调试时,我可以将端口绑定添加到 docker 容器吗?
【发布时间】:2020-09-14 07:26:33
【问题描述】:

我正在使用 dockers 和 .net 5 做一个 PoC。这个想法是创建一个控制台应用程序或工作服务,它打开一个 TCP 端口并开始监听一些特定的流量。如果我在 docker 之外对其进行测试,它可以工作,但是当我尝试使用 docker 进行调试时,容器在没有任何端口绑定的情况下运行。没有端口绑定,程序不会收到任何连接。

后台工作人员或控制台应用程序项目会发生这种情况。同时,我尝试使用“Kubernetes 容器应用程序”项目并删除所有 Web 代码并放入我自己的代码。通过这个项目,VS 将一个随机端口绑定到暴露的端口。

我是否可以手动将端口绑定添加到 Visual Studio 调试过程中?

【问题讨论】:

    标签: visual-studio docker debugging .net-core .net-5


    【解决方案1】:

    在 docker 上工作时总是有 2 个网络

    1. 主机网络
    2. docker自己的私网docker network ls

    对于端口映射--ports <left side>:<right side>,如果您正在使用 docker 容器进行调试,则必须使用映射右侧的端口。如果您从主机访问,请使用左侧的一个

    不确定这是否是您需要的。

    我创建了一个带有多个端口绑定的 docker-compose,如下所示:

    version: '3.4'
    
    services:
      consoleapp2:
        image: ${DOCKER_REGISTRY-}consoleapp2
        ports:
          - "8080:80"
          - "8081:81"
          - "8082:82"
        build:
          context: .
          dockerfile: ConsoleApp2/Dockerfile
    

    这是我在调试应用程序时看到的:

    【讨论】:

    • 如果不是这个那么我可能没有得到问题
    【解决方案2】:

    也可以使用容器的80端口,然后通过launchSettings.json中的httpPort映射

    Dockerfile

    FROM mcr.microsoft.com/dotnet/runtime:5.0-buster-slim AS base
    WORKDIR /app
    EXPOSE 80
    
    ...
    

    launchSettings.json

    {
      "profiles": {
        "TerminalService": {
          "commandName": "Project",
          "environmentVariables": {
            "DOTNET_ENVIRONMENT": "Development"
          },
          "dotnetRunMessages": "true"
        },
        "Docker": {
          "commandName": "Docker",
          "httpPort": 9003,
          "useSSL": false
        }
      }
    }
    

    这会将容器端口 80 绑定到主机端口 9003。

    然后在我的 Worker 的代码中,我有一个 TCP 侦听器在端口 80 上侦听:

    TcpListener listener = new TcpListener(IPAddress.Any, 80);
    

    看起来你也可以通过项目文件中的 DockerfileRunArguments 来完成(我没有测试这个):

    <PropertyGroup>
      <DockerfileRunArguments>-p 8883:8883</DockerfileRunArguments>
    </PropertyGroup>
    

    见: https://github.com/microsoft/DockerTools/issues/206

    【讨论】:

    • 感谢您提供有关 DockerfileRunArguments 的提示,我可以确认此方法有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多