docker - 无法从 Visual Studio 2019 将调试器附加到本地 docker linux 容器

标签 docker asp.net-core docker-compose

所以我在我的本地机器上使用 docker-compose 在 docker 容器上运行了简单的 hello world .net 核心应用程序设置

问题是当我尝试使用 Debug -> Attach to Process -> ConnectionType Docker(Linux Container) -> 选择进程并点击附加从 vs2019 附加调试器时。

我收到错误说明

Failed to launch debug adapter 'coreclr'.
Failed to copy files.


Initialization log:
Determining user folder on remote system...
Checking for existing installation of debugging tools...
Downloading debugger launcher...
Creating debugger installation folder: /root/.vs-debugger
Copying debugger launcher to /root/.vs-debugger/GetVsDbg.sh
Failed: Failed to copy files.
The program '[360] bash' has exited with code -1 (0xffffffff).

似乎由于某种原因,visual studio 试图将调试器复制到正在运行的容器中,但失败了

这是简单的 dockerfile 和 docker-compose 脚本

文件
FROM microsoft/aspnetcore-build:1.1.2

RUN apt-get update && apt-get install -y unzip

RUN curl -sSL \
   https://aka.ms/getvsdbgsh | bash /dev/stdin -v vs2019 -l /root/.vs-debugger

COPY node_modules/wait-for-it.sh/bin/wait-for-it /tools/wait-for-it.sh

RUN chmod +x /tools/wait-for-it.sh

ENV DBHOST=dev_mysql WAITHOST=dev_mysql WAITPORT=3306

ENV DOTNET_USE_POLLING_FILE_WATCHER=true 

EXPOSE 80/tcp

VOLUME /app

WORKDIR /app

ENTRYPOINT dotnet restore \
    && /tools/wait-for-it.sh $WAITHOST:$WAITPORT --timeout=0 \
       && dotnet watch run --environment=Development


docker-compose.yml
version: "3"

volumes:
  productdata:

networks:
  backend:

services:
  mysql:
    image: "mysql:8.0.0"
    volumes:
      - productdata:/var/lib/mysql
    networks:
      - backend
    environment:
      - MYSQL_ROOT_PASSWORD=mysecret
      - bind-address=0.0.0.0

  mvc:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/app
      - /app/obj
      - /app/bin
      - ~/.nuget:/root/.nuget
      - /root/.nuget/packages/.tools
    ports:
      - 3000:80
    networks:
      - backend
    environment:
      - DBHOST=mysql
      - WAITHOST=mysql
    depends_on:
      - mysql

笔记:
- 我已经勾选了docker主机上的共享驱动器

关于这个的任何线索?

最佳答案

我有一个解决办法 -
请注意,每个正在运行的容器只能执行一次此操作,如果使用新代码重新部署容器,则必须再次执行此操作。

  • 在 Visual Studio 中查找容器
  • 右键单击容器并选择“打开终端”
  • 在已打开的终端内,按以下顺序运行以下命令:
  • apt-get 更新
  • apt-get install procps -y
  • apt-get install wget -y
  • mkdir/root/.vs-debugger
  • curl -sSL https://aka.ms/getvsdbgsh -o ‘/root/.vs-debugger/GetVsDbg.sh’
  • bash/root/.vs-debugger/GetVsDbg.sh -v latest -l/vsdbg
  • 将 VS 中的构建模式更改为 Release
  • 附加调试器

  • 您还可以使用以下命令一次性运行所有命令 4-9:
    apt-get update && apt-get install procps -y && apt-get install wget -y && mkdir/root/.vs-debugger && curl -sSL https://aka.ms/getvsdbgsh -o ‘/root/.vs-debugger/GetVsDbg.sh’ && bash/root/.vs-debugger/GetVsDbg.sh -v latest -l/vsdbg

    关于docker - 无法从 Visual Studio 2019 将调试器附加到本地 docker linux 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60449441/

    相关文章:

    docker - 访问正在运行的 docker 容器时重置连接

    macos - 在不同端口上 Docker 多个站点

    Dockerfile的RUN命令找不到脚本

    c# - .net core 3,MVC,使用端点路由时不支持使用 'UseMvcWithDefaultRoute' 配置 MVC

    c# - 使用 IIS 时出现多个错误

    mongodb - 由Docker-Compose启动的Mongo-Express导致错误[MongoError]:首次连接时无法连接到服务器[mongo:27017]

    docker - 限制 docker 容器内启动的进程数量

    docker - 如何从 Docker 容器连接到 OSX 主机上的 Android 虚拟设备

    dependency-injection - .Net Core 中具有依赖注入(inject)的自定义路由约束

    php - 如何使用 Docker 不在默认 80 端口启动现有的 Wordpress 应用程序镜像?