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\ndocker build -t concepttest_crud1 .\nRun Code Online (Sandbox Code Playgroud)\n\nDockerfile(由 Visual Studio 创建):
\n\nFROM 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"]\nRun Code Online (Sandbox Code Playgroud)\n\n4)我使用以下命令运行我的图像:
\n\ndocker run -d -p 8080:44390 --name crud1 concepttest_crud1\nRun Code Online (Sandbox Code Playgroud)\n\n其中 44390 是我在 Visual Studio 中配置的 api 端口。
\n\n调试时我使用以下方式访问 api:
\n\nhttps://localhost:44390/api/Authors\nRun Code Online (Sandbox Code Playgroud)\n\n5) 我正在尝试使用下一个 url 在 Chrome 中测试我的 dockerized api:
\n\nhttps://localhost:8080/api/Authors\nRun Code Online (Sandbox Code Playgroud)\n\n无济于事。无论我尝试使用 url,当 docker run 命令执行没有错误时,我的 api 都不会启动。
\n\ndocker ps 输出:
\n\nCONTAINER 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\nRun Code Online (Sandbox Code Playgroud)\n\n码头图像输出:
\n\nREPOSITORY TAG IMAGE ID CREATED SIZE\nconcepttest_crud1 latest 878e4c4845f6 About an hour ago 228MB\n<none> <none> 36a29990113c About an hour ago 1GB\nRun 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]\nRun Code Online (Sandbox Code Playgroud)\n\n编辑 2:添加了卷曲。
\n\ndocker exec -it 0f0bf4b4de30 /bin/bash . root@4237f947b2b0:/app# curl https://localhost:8080/api/Authors\n\n.: .: Is a directory\nRun Code Online (Sandbox Code Playgroud)\n\n编辑3:新的卷曲
\n\ndocker exec -it 0f0bf4b4de30 /bin/bash . root@4237f947b2b0:/app# curl https://localhost/api/Authors\n.: .: Is a directory\nRun Code Online (Sandbox Code Playgroud)\n
就我而言,这是由于在项目中启用了 SSL,但在删除与 https 相关的所有内容后,它开始按预期工作。
启用 SSL 意味着在 docker 容器内安装 SSL 证书并启用它,但我无法做到这一点,因为我没有证书,而且我只是在学习 docker。
我已完成的步骤:
在 Startup.cs 中,我禁用了 https 重定向
//app.UseHttpsRedirection();
Run Code Online (Sandbox Code Playgroud)
在“调试”部分下的项目属性中,我取消选中“启用 SSL”。
然后我就可以按预期运行容器了。
| 归档时间: |
|
| 查看次数: |
3402 次 |
| 最近记录: |