Docker:docker 运行后无法在浏览器上启动 .Net Core 3.1 Web Api

Die*_*rez 4 api docker .net-core dockerfile asp.net-core

我是 Docker 新手,首先,我试图完成一项基本任务,将 .Net Core 3.1 Web Api 进行 dockerize 并从命令行运行它(而不是从它实际工作的 Visual Studio 运行)。

\n\n

我使用以下 Dockerfile 和以下命令创建项目映像:

\n\n
docker build -t concepttest_crud1 .\n
Run Code Online (Sandbox Code Playgroud)\n\n

Dockerfile(由 Visual Studio 创建):

\n\n
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base\nWORKDIR /app\nEXPOSE 80\nEXPOSE 443\n\nFROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build\nWORKDIR /src\nCOPY ["Gfi_ConceptTest_CRUD1/Gfi_ConceptTest_CRUD1.csproj", "Gfi_ConceptTest_CRUD1/"]\nRUN dotnet restore "Gfi_ConceptTest_CRUD1/Gfi_ConceptTest_CRUD1.csproj"\nCOPY . .\nWORKDIR "/src/Gfi_ConceptTest_CRUD1"\nRUN dotnet build "Gfi_ConceptTest_CRUD1.csproj" -c Release -o /app/build\n\nFROM build AS publish\nRUN dotnet publish "Gfi_ConceptTest_CRUD1.csproj" -c Release -o /app/publish\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=publish /app/publish .\nENTRYPOINT ["dotnet", "Gfi_ConceptTest_CRUD1.dll"]\n
Run Code Online (Sandbox Code Playgroud)\n\n

4)我使用以下命令运行我的图像:

\n\n
docker run -d -p 8080:44390 --name crud1 concepttest_crud1\n
Run Code Online (Sandbox Code Playgroud)\n\n

其中 44390 是我在 Visual Studio 中配置的 api 端口。

\n\n

调试时我使用以下方式访问 api:

\n\n
https://localhost:44390/api/Authors\n
Run Code Online (Sandbox Code Playgroud)\n\n

5) 我正在尝试使用下一个 url 在 Chrome 中测试我的 dockerized api:

\n\n
https://localhost:8080/api/Authors\n
Run Code Online (Sandbox Code Playgroud)\n\n

无济于事。无论我尝试使用 url,当 docker run 命令执行没有错误时,我的 api 都不会启动。

\n\n

docker ps 输出:

\n\n
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES\n8df6c92c6678        concepttest_crud1   "dotnet Gfi_ConceptT\xe2\x80\xa6"   22 minutes ago      Up 22 minutes       0.0.0.0:8080->44390/tcp   crud1\n
Run Code Online (Sandbox Code Playgroud)\n\n

码头图像输出:

\n\n
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE\nconcepttest_crud1                      latest              878e4c4845f6        About an hour ago   228MB\n<none>                                 <none>              36a29990113c        About an hour ago   1GB\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 Docker 图像输出中,我不知道为什么我看到两个图像(第二个没有名称),而我只期望一个。

\n\n

我也尝试过http://192.168.99.100:8080/api/Authors但它也不起作用。

\n\n

编辑1:添加docker检查。

\n\n
[\n    {\n        "Id": "0f0bf4b4de30ef5dd222016db639abe45e5e70bc25270b74df45eec64e319b57",\n        "Created": "2019-12-23T12:30:06.3947619Z",\n        "Path": "dotnet",\n        "Args": [\n            "Gfi_ConceptTest_CRUD1.dll"\n        ],\n        "State": {\n            "Status": "running",\n            "Running": true,\n            "Paused": false,\n            "Restarting": false,\n            "OOMKilled": false,\n            "Dead": false,\n            "Pid": 83477,\n            "ExitCode": 0,\n            "Error": "",\n            "StartedAt": "2019-12-23T12:30:08.9701219Z",\n            "FinishedAt": "0001-01-01T00:00:00Z"\n        },\n        "Image": "sha256:92b9217abf5dc6a7fc6c10aac2ac5549d6873adfc1b3ed30264d6e1fd4a971c7",\n        "ResolvConfPath": "/var/lib/docker/containers/0f0bf4b4de30ef5dd222016db639abe45e5e70bc25270b74df45eec64e319b57/resolv.conf",\n        "HostnamePath": "/var/lib/docker/containers/0f0bf4b4de30ef5dd222016db639abe45e5e70bc25270b74df45eec64e319b57/hostname",\n        "HostsPath": "/var/lib/docker/containers/0f0bf4b4de30ef5dd222016db639abe45e5e70bc25270b74df45eec64e319b57/hosts",\n        "LogPath": "/var/lib/docker/containers/0f0bf4b4de30ef5dd222016db639abe45e5e70bc25270b74df45eec64e319b57/0f0bf4b4de30ef5dd222016db639abe45e5e70bc25270b74df45eec64e319b57-json.log",\n        "Name": "/crud1",\n        "RestartCount": 0,\n        "Driver": "overlay2",\n        "Platform": "linux",\n        "MountLabel": "",\n        "ProcessLabel": "",\n        "AppArmorProfile": "",\n        "ExecIDs": null,\n        "HostConfig": {\n            "Binds": null,\n            "ContainerIDFile": "",\n            "LogConfig": {\n                "Type": "json-file",\n                "Config": {}\n            },\n            "NetworkMode": "default",\n            "PortBindings": {\n                "443/tcp": [\n                    {\n                        "HostIp": "",\n                        "HostPort": "8080"\n                    }\n                ]\n            },\n            "RestartPolicy": {\n                "Name": "no",\n                "MaximumRetryCount": 0\n            },\n            "AutoRemove": false,\n            "VolumeDriver": "",\n            "VolumesFrom": null,\n            "CapAdd": null,\n            "CapDrop": null,\n            "Capabilities": null,\n            "Dns": [],\n            "DnsOptions": [],\n            "DnsSearch": [],\n            "ExtraHosts": null,\n            "GroupAdd": null,\n            "IpcMode": "private",\n            "Cgroup": "",\n            "Links": null,\n            "OomScoreAdj": 0,\n            "PidMode": "",\n            "Privileged": false,\n            "PublishAllPorts": false,\n            "ReadonlyRootfs": false,\n            "SecurityOpt": null,\n            "UTSMode": "",\n            "UsernsMode": "",\n            "ShmSize": 67108864,\n            "Runtime": "runc",\n            "ConsoleSize": [\n                28,\n                165\n            ],\n            "Isolation": "",\n            "CpuShares": 0,\n            "Memory": 0,\n            "NanoCpus": 0,\n            "CgroupParent": "",\n            "BlkioWeight": 0,\n            "BlkioWeightDevice": [],\n            "BlkioDeviceReadBps": null,\n            "BlkioDeviceWriteBps": null,\n            "BlkioDeviceReadIOps": null,\n            "BlkioDeviceWriteIOps": null,\n            "CpuPeriod": 0,\n            "CpuQuota": 0,\n            "CpuRealtimePeriod": 0,\n            "CpuRealtimeRuntime": 0,\n            "CpusetCpus": "",\n            "CpusetMems": "",\n            "Devices": [],\n            "DeviceCgroupRules": null,\n            "DeviceRequests": null,\n            "KernelMemory": 0,\n            "KernelMemoryTCP": 0,\n            "MemoryReservation": 0,\n            "MemorySwap": 0,\n            "MemorySwappiness": null,\n            "OomKillDisable": false,\n            "PidsLimit": null,\n            "Ulimits": null,\n            "CpuCount": 0,\n            "CpuPercent": 0,\n            "IOMaximumIOps": 0,\n            "IOMaximumBandwidth": 0,\n            "MaskedPaths": [\n                "/proc/asound",\n                "/proc/acpi",\n                "/proc/kcore",\n                "/proc/keys",\n                "/proc/latency_stats",\n                "/proc/timer_list",\n                "/proc/timer_stats",\n                "/proc/sched_debug",\n                "/proc/scsi",\n                "/sys/firmware"\n            ],\n            "ReadonlyPaths": [\n                "/proc/bus",\n                "/proc/fs",\n                "/proc/irq",\n                "/proc/sys",\n                "/proc/sysrq-trigger"\n            ]\n        },\n        "GraphDriver": {\n            "Data": {\n                "LowerDir": "/var/lib/docker/overlay2/3781dd694db551736c551397e9a0834ebd6fa653e0b78b6d6244e15ef7b8c291-init/diff:/var/lib/docker/overlay2/025232b693c4a6470e0b26e5302e5165757dbc4a44d5af5b7b8aa8dacd77ee03/diff:/var/lib/docker/overlay2/bcca2356fe199bbaa471c3590a3f55df343eecd84899cf570197d97ed8111d95/diff:/var/lib/docker/overlay2/5f2d77acbd50bc4a8cde011128fb43b2a0cff888e716c5ba882d4dd906bc1901/diff:/var/lib/docker/overlay2/ca57ac72ac1d48b622745bb473fd71c18d67392b02cdf938835f05cf9b547681/diff:/var/lib/docker/overlay2/0b894b31b26df6e40b57a86dc66bbd4eda71d0ebf6d5755c4c43bc296e9a24de/diff:/var/lib/docker/overlay2/b6ca0109d2718605ccba2585e52ae1718cbecd2fcd62197f1f7fd505cf2be358/diff:/var/lib/docker/overlay2/e0ff62d02fe725053674ce9e3b59a4004c101fd2e98f919e5037a412f1c3a4e8/diff",\n                "MergedDir": "/var/lib/docker/overlay2/3781dd694db551736c551397e9a0834ebd6fa653e0b78b6d6244e15ef7b8c291/merged",\n                "UpperDir": "/var/lib/docker/overlay2/3781dd694db551736c551397e9a0834ebd6fa653e0b78b6d6244e15ef7b8c291/diff",\n                "WorkDir": "/var/lib/docker/overlay2/3781dd694db551736c551397e9a0834ebd6fa653e0b78b6d6244e15ef7b8c291/work"\n            },\n            "Name": "overlay2"\n        },\n        "Mounts": [],\n        "Config": {\n            "Hostname": "0f0bf4b4de30",\n            "Domainname": "",\n            "User": "",\n            "AttachStdin": false,\n            "AttachStdout": false,\n            "AttachStderr": false,\n            "ExposedPorts": {\n                "443/tcp": {},\n                "8080/tcp": {}\n            },\n            "Tty": true,\n            "OpenStdin": false,\n            "StdinOnce": false,\n            "Env": [\n                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",\n                "ASPNETCORE_URLS=http://+:80",\n                "DOTNET_RUNNING_IN_CONTAINER=true"\n            ],\n            "Cmd": null,\n            "Image": "crud1",\n            "Volumes": null,\n            "WorkingDir": "/app",\n            "Entrypoint": [\n                "dotnet",\n                "Gfi_ConceptTest_CRUD1.dll"\n            ],\n            "OnBuild": null,\n            "Labels": {}\n        },\n        "NetworkSettings": {\n            "Bridge": "",\n            "SandboxID": "ed889f3303ca17ad4e79ae917d8b17c5e590af502adb8049dbd7e0fcd46b323c",\n            "HairpinMode": false,\n            "LinkLocalIPv6Address": "",\n            "LinkLocalIPv6PrefixLen": 0,\n            "Ports": {\n                "443/tcp": [\n                    {\n                        "HostIp": "0.0.0.0",\n                        "HostPort": "8080"\n                    }\n                ],\n                "8080/tcp": null\n            },\n            "SandboxKey": "/var/run/docker/netns/ed889f3303ca",\n            "SecondaryIPAddresses": null,\n            "SecondaryIPv6Addresses": null,\n            "EndpointID": "001cd49640c4211e5eeb1eedacedd6de07022cc3362acaca59b82f0e537f6238",\n            "Gateway": "172.17.0.1",\n            "GlobalIPv6Address": "",\n            "GlobalIPv6PrefixLen": 0,\n            "IPAddress": "172.17.0.2",\n            "IPPrefixLen": 16,\n            "IPv6Gateway": "",\n            "MacAddress": "02:42:ac:11:00:02",\n            "Networks": {\n                "bridge": {\n                    "IPAMConfig": null,\n                    "Links": null,\n                    "Aliases": null,\n                    "NetworkID": "ccea227190a1f04d0043015cf3d9932ba41f4a96dfb9bc2a175a06483a9ca66e",\n                    "EndpointID": "001cd49640c4211e5eeb1eedacedd6de07022cc3362acaca59b82f0e537f6238",\n                    "Gateway": "172.17.0.1",\n                    "IPAddress": "172.17.0.2",\n                    "IPPrefixLen": 16,\n                    "IPv6Gateway": "",\n                    "GlobalIPv6Address": "",\n                    "GlobalIPv6PrefixLen": 0,\n                    "MacAddress": "02:42:ac:11:00:02",\n                    "DriverOpts": null\n                }\n            }\n        }\n    }\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑 2:添加了卷曲。

\n\n
docker exec -it 0f0bf4b4de30 /bin/bash . root@4237f947b2b0:/app# curl https://localhost:8080/api/Authors\n\n.: .: Is a directory\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑3:新的卷曲

\n\n
docker exec -it 0f0bf4b4de30 /bin/bash . root@4237f947b2b0:/app# curl https://localhost/api/Authors\n.: .: Is a directory\n
Run Code Online (Sandbox Code Playgroud)\n

Die*_*rez 5

就我而言,这是由于在项目中启用了 SSL,但在删除与 https 相关的所有内容后,它开始按预期工作。

启用 SSL 意味着在 docker 容器内安装 SSL 证书并启用它,但我无法做到这一点,因为我没有证书,而且我只是在学习 docker。

我已完成的步骤:

在 Startup.cs 中,我禁用了 https 重定向

//app.UseHttpsRedirection();
Run Code Online (Sandbox Code Playgroud)

在“调试”部分下的项目属性中,我取消选中“启用 SSL”。

然后我就可以按预期运行容器了。