当前位置: 首页 > 面试题库 >

Docker dotnet watch run错误:无法绑定到IPv6环回接口上的https:// localhost:5000

鄢承运
2023-03-14
问题内容

如标题所示,我有一个无法从主机端口绑定到容器端口的容器。我尝试搜索类似的问题,但是自从Microsoft
microsoft/dotnet在sdk映像中引入了带有dotnet watch 的docker repo
以来,没有发现与在docker容器中使用dotnet watch相关的任何信息。

对于我在做什么错的任何建议,我们将不胜感激。

Docker文件

FROM microsoft/dotnet:2.1.301-sdk as build
ENV DOTNET_USE_POLLING_FILE_WATCHER 1
WORKDIR /app
COPY . .
RUN dotnet restore
EXPOSE 5000-5001
ENTRYPOINT [ "dotnet", "watch", "run", "--no-restore"]

docker-compose.yml

version: "3"

services:

  esportapp:
    container_name: esportapp
    image: esportapp:dev
    build:
      context: .
      dockerfile: Docker/dev.Dockerfile
    volumes:
      - esportapp.volume:/app
    ports:
      - "5000:5000"
      - "5001:5001"

volumes:
  esportapp.volume:

完成错误:

esportapp    | Hosting environment: Development
esportapp    | Content root path: /app
esportapp    | Now listening on: https://localhost:5001
esportapp    | Now listening on: http://localhost:5000
esportapp    | Application started. Press Ctrl+C to shut down.
esportapp    | warn: Microsoft.AspNetCore.Server.Kestrel[0]
esportapp    |       Unable to bind to https://localhost:5001 on the IPv6 loopback interface: 'Cannot assign requested address'.
esportapp    | warn: Microsoft.AspNetCore.Server.Kestrel[0]
esportapp    |       Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Cannot assign requested address'.

问题答案:

我自己就遇到了这个问题。我认为dotnet watch run与localhost类型的url配合不好。尝试https://0.0.0.0:5000在您的容器中将托管网址设置为。

在dockerfile中,带有:

ENTRYPOINT [ "dotnet", "watch", "run", "--no-restore", "--urls", "https://0.0.0.0:5000"]

或在launchSettings.json中,例如:

{
  "profiles": {
    "[Put your project name here]": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "DOTNET_USE_POLLING_FILE_WATCHER": "true"
      },
      "applicationUrl": "https://0.0.0.0:5000/"
    }
  }
}

现在,要使其自动从容器中重新加载,您必须使用轮询文件监视程序。这就是第二个环境变量的用途。(这很常见,您必须使用webpack,angular等来执行此操作)。

在您的情况下,您需要将更esportsapp.volume改为主机上的目录:

volumes:
  - ./:/app

它将容器中的/ app卷映射到docker-compose目录。您面临的问题是该应用程序内置在项目默认的docker-
compose网络上的某个卷中,因此,当您在源目录中更改文件时,该卷中实际上并没有更改。但是,使用此修复程序,您将遇到容器内部dotnet恢复和dotnet监视更改主机文件的问题。如果您有兴趣,可以解决所有问题…

我通常的.Net Core App Docker设置

要调试,请运行: docker-compose -f run.yml up --build

要构建发行版: docker-compose -f build.yml up --build

项目结构

/                                               # source control root
/build.yml                                      # docker-compose file for building a release
/run.yml                                        # docker-compose file for running locally & debugging
/project                                        # an application
/project/build.Dockerfile                       # the docker container that will build "project" for release
/project/run.Dockerfile                         # the docker container that will build and run "project" locally for debugging
/project/.dockerignore                          # speeds up container builds by excluding large directories like "packages" or "node_modules"
/project/src                                    # where I hide my source codez
/project/src/Project.sln
/project/src/Project/Project.csproj
/project/src/Project/Directory.Build.props      # keeps a docker mapped volume from overwriting .dlls on your host
/project/src/Project.Data/Project.Data.csproj   # typical .Net project structure
/web-api                                        # another application...

Directory.Build.props (将其与.csproj放在同一文件夹中,dotnet watch run以免使命令与主机上的源目录混淆)

<Project>

  <PropertyGroup>
    <DefaultItemExcludes>$(DefaultItemExcludes);$(MSBuildProjectDirectory)/obj/**/*</DefaultItemExcludes>
    <DefaultItemExcludes>$(DefaultItemExcludes);$(MSBuildProjectDirectory)/bin/**/*</DefaultItemExcludes>
  </PropertyGroup>

  <PropertyGroup Condition="'$(DOTNET_RUNNING_IN_CONTAINER)' == 'true'">
    <BaseIntermediateOutputPath>$(MSBuildProjectDirectory)/obj/container/</BaseIntermediateOutputPath>
    <BaseOutputPath>$(MSBuildProjectDirectory)/bin/container/</BaseOutputPath>
  </PropertyGroup>

  <PropertyGroup Condition="'$(DOTNET_RUNNING_IN_CONTAINER)' != 'true'">
    <BaseIntermediateOutputPath>$(MSBuildProjectDirectory)/obj/local/</BaseIntermediateOutputPath>
    <BaseOutputPath>$(MSBuildProjectDirectory)/bin/local/</BaseOutputPath>
  </PropertyGroup>

</Project>

run.yml (用于调试的docker-compose.yml)

version: "3.5"
services:
  project:
    build:
      context: ./project
      dockerfile: run.Dockerfile
    ports:
      - 5000:80
    volumes:
      - ./project/src/Project:/app

run.Dockerfile (用于调试的Dockerfile)

FROM microsoft/dotnet:2.1-sdk

# install the .net core debugger
RUN apt-get update
RUN apt-get -y --no-install-recommends install unzip
RUN apt-get -y --no-install-recommends install procps
RUN rm -rf /var/lib/apt/lists/*

RUN curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l /vsdbg

VOLUME /app
WORKDIR /app

CMD dotnet watch run --urls http://0.0.0.0:80

build.yml (用于构建发行版的docker-compose.yml)

version: "3.5"
services:
  project:
    build:
      context: ./project
      dockerfile: build.Dockerfile
    volumes:
      - ./project:/app

build.Dockerfile (用于构建发行版的Dockerfile)

FROM microsoft/dotnet:2.1-sdk

VOLUME /app

# restore as a separate layer to speed up builds
WORKDIR /src
COPY src/Project/Project.csproj .
RUN dotnet restore

COPY src/Project/ .
CMD dotnet publish -c Release -o /app/out/


 类似资料:
  • 我正在使用asp。net core 3.1 docker支持的项目模板(VS2019)用于开发web API。没有编译错误。 运行项目时,在VS2019的输出窗口中,我看到以下消息: 这是我的Docker.develop文件: 有人能在这里帮助我提供他们的指导来解决这个问题吗

  • 我已经使用FTP部署了我的应用程序好几次,一直工作到现在。我没有使用docker,所以我想azure会在我上传文件后对我的应用程序进行docker。我得到两个错误,我不确定是否与端口,我的设置有关。json,我的启动项目。。。我使用的是NetCore 3.1和angular 6。 我已尝试添加端口、ASPNETCORE\u URL。。。以及Azure应用程序设置的其他变量。。。 下面是错误: Az

  • 从2.0版开始,Elasticsearch默认情况下只绑定在环回接口上(就配置而言是_local_)。 文档说明有一种方法可以切换到另一个网络,例如_non_loopback_绑定到第一个非环回接口。很好用。 但我不知道如何组合这些设置,以便Elasticsearch同时绑定环回和非环回接口? ps.我的原因是,我在每个通过localhost连接到它的Elasticsearch实例上使用Logst

  • > 我已经用以下接口配置了Ubuntu Linux系统&分配的IPV6地址如下: eth2:链路封装:以太网HWaddr 00:50:56:8D:56:14 inet ADDR:192.168.2.10BCAST:0.0.0掩码:255.255.255.0 inet6 ADDR:FC00:1234:2::10/120作用域:全局 inet6 ADDR:FE80::250:56FF:FE8D:561

  • 我有一个Zookeeper在端口2181(默认)上运行,一个Kafka服务器在我的本地机器上监听端口9090。 当我在本地运行kafka CLI或在本地运行消费者/生产者应用程序时,我在连接上没有问题。 然后尝试将Kafka使用者绑定到Docker容器中,并在本地运行该Docker容器,例如: 这将给出错误: 这是有意义的,因为Kafka服务器绑定到9092,如:所示 通过将Docker容器映射到

  • 我收到一个错误:无法连接到端口7055上的主机127.0.0.1 当我尝试在ubuntu服务器上用firefox运行selenium时。 谁能帮忙吗? 我有硒版2.53