簡體   English   中英

docker 正在運行,但我無法使用 localhost 進行連接

[英]docker is running but I am unable to connect using localhost

我有以下 Dockerfile

FROM microsoft/dotnet:latest

WORKDIR /project

我需要一個 .Net webapi 應用程序。 我在運行 dotnet 命令時生成了以下.Net 配置。

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false, 
    "anonymousAuthentication": true, 
    "iisExpress": {
      "applicationUrl": "http://localhost:4900",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "ContentBroker": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "applicationUrl": "http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

運行 web API 的端口設置為使用 5000,當我運行 dotnet run 我看到以下警告,但應用程序啟動

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

運行 docker 時,我使用docker run -it -v $(pwd)/project:/project -p 5000:80...

但是,當我嘗試使用 http://localhost/ 從 docker 外部訪問應用程序時,我只看到無法訪問此站點

我試圖更改.Net 配置文件中使用的端口。 我嘗試更改運行 docker 時使用的端口:端口組合,並嘗試運行 2 個相同的 docker 映像,1 個在端口 5000 上運行 .Net 應用程序,並嘗試使用 ZF6E407C9DE701F5D555555555 從第二個容器訪問它。 但我無法訪問。

我通常從不回答自己的問題,但我認為這是一個合法的答案。

在多次嘗試相同的結果后,我嘗試更改 launchSettings.json 文件。 如前所述,我對 Go lang 項目使用相同的方法,在該項目中,我在運行容器時使用 -p 80:80 並在容器內使用基於 Go 的 Z293C9EA246FF9985DC6F62A650F78 服務器絕對沒有配置。

下面是我用來構建容器的 Dockerfile

FROM microsoft/dotnet:latest

WORKDIR /project

構建后,我使用以下命令運行它

docker run -it -p 8080:5000 -v $(pwd):/project b049b9d625c9

在容器內我使用這個命令創建了一個新網站

dotnet new web --no-https

其次是 dotnet 運行

The template "ASP.NET Core Empty" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on /project/project.csproj...
  Restore completed in 2.55 sec for /project/project.csproj.

Restore succeeded.

root@20e80795dbea:/project# dotnet run
Using launch settings from /project/Properties/launchSettings.json...
warn: Microsoft.AspNetCore.Server.Kestrel[0]
      Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Cannot assign requested address'.
Hosting environment: Development
Content root path: /project
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

此時我無法訪問該站點。 然后我將launchSettings.json從:

"project": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }

至:

"project": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "http://::5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }

然后再次運行 dotnet run ,這次我在容器中看到以下 output

dotnet run
Using launch settings from /project/Properties/launchSettings.json...
Hosting environment: Development
Content root path: /project
Now listening on: http://[::]:5000
Application started. Press Ctrl+C to shut down.

現在,當使用 http://localhost:8080/ 訪問站點時,我看到打印了“Hello World”消息,並且看到請求被記錄在容器中

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://localhost:8080/  
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 54.3697ms 200 
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://localhost:8080/favicon.ico  
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 1.367ms 200

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM