【问题标题】:Docker: Cannot launch .Net Core 3 Api on browser after "successful" docker runDocker:“成功” docker run 后无法在浏览器上启动 .Net Core 3 Api
【发布时间】:2020-06-10 14:20:03
【问题描述】:

我正在尝试完成一个基本的 Docker 任务,dockerize 并在本地运行一个 .Net Core 3.0 网络,但没有成功。

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

docker build --tag webtarjetasparquimetros:1.0 .

Dockerfile(由 Visual Studio 创建):

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY ["BSM_WebTarjetasParquimetros/BSM_WebTarjetasParquimetros.csproj", "BSM_WebTarjetasParquimetros/"]
RUN dotnet restore "BSM_WebTarjetasParquimetros/BSM_WebTarjetasParquimetros.csproj"
COPY . .
WORKDIR "/src/BSM_WebTarjetasParquimetros"
RUN dotnet build "BSM_WebTarjetasParquimetros.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "BSM_WebTarjetasParquimetros.csproj" -c Release -o /app/publish

FROM base AS final
EXPOSE 5000
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "BSM_WebTarjetasParquimetros.dll"]

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

docker run -it -p 8000:8080 --name wtp webtarjetasparquimetros:1.0
warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60]
      Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed.
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
      No XML encryptor configured. Key {74d2f1a2-fcb8-423c-8f34-a1f178e87ae5} may be persisted to storage in unencrypted form.
Hosting environment: Production
Content root path: /app
Now listening on: http://[::]:80
Application started. Press Ctrl+C to shut down.

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

http://localhost:8000/Account/Login

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

docker ps 输出:

CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                                      NAMES
5b7a3b752c08        webtarjetasparquimetros:1.0   "dotnet BSM_WebTarje…"   4 seconds ago       Up 3 seconds        80/tcp, 5000/tcp, 0.0.0.0:8000->8080/tcp   wtp

我也尝试过http://192.168.99.100:8000/Account/Login,但它也不起作用。

Docker 检查:

[
    {
        "Id": "5b7a3b752c084890ab506771edf135f6dc6a9dad5fc8bdc8c3c17b8c4bf70319",
        "Created": "2020-06-10T14:12:28.74037522Z",
        "Path": "dotnet",
        "Args": [
            "BSM_WebTarjetasParquimetros.dll"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 11373,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-06-10T14:12:28.993259128Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:26d99146db641f4df0fef61b7fafc45a3ccdefa7cfdd55e8c07bf7473babaae6",
        "ResolvConfPath": "/var/lib/docker/containers/5b7a3b752c084890ab506771edf135f6dc6a9dad5fc8bdc8c3c17b8c4bf70319/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/5b7a3b752c084890ab506771edf135f6dc6a9dad5fc8bdc8c3c17b8c4bf70319/hostname",
        "HostsPath": "/var/lib/docker/containers/5b7a3b752c084890ab506771edf135f6dc6a9dad5fc8bdc8c3c17b8c4bf70319/hosts",
        "LogPath": "/var/lib/docker/containers/5b7a3b752c084890ab506771edf135f6dc6a9dad5fc8bdc8c3c17b8c4bf70319/5b7a3b752c084890ab506771edf135f6dc6a9dad5fc8bdc8c3c17b8c4bf70319-json.log",
        "Name": "/wtp",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {
                "8080/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "8000"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Capabilities": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                39,
                198
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/ef784a31d422124b737b9aa5a335f29f343641ccfe716a330e8b5ab90fa22f05-init/diff:/var/lib/docker/overlay2/dbdd7c7c0923c57ca4e39be9ab73dc7d80f2def3dfb2054ff3a96eac812116ec/diff:/var/lib/docker/overlay2/8bc8ffba35e354bc92fc0cd1bee606833fea9708db10be73c5e22663ce156585/diff:/var/lib/docker/overlay2/0226a1a2fe99bc94d20673c4e2ed515d9b53c4047f7d8c9705f4a56e4064871b/diff:/var/lib/docker/overlay2/3f5fbe554097033b44ed5131d77aeb09bfbb83f2ed1de9a82e7dbe93418607fd/diff:/var/lib/docker/overlay2/6015c14aab18942ecafe0f45111229815bb69acad9ffeaf5a6de2c8ad470a864/diff:/var/lib/docker/overlay2/30f5bd570bbc6c8db37fbb176757c95978084f769a341552ac115153fa46f17a/diff:/var/lib/docker/overlay2/337f954b5edec99af3f9d57321967e2345719853d96d788ff989e68a00184d07/diff",
                "MergedDir": "/var/lib/docker/overlay2/ef784a31d422124b737b9aa5a335f29f343641ccfe716a330e8b5ab90fa22f05/merged",
                "UpperDir": "/var/lib/docker/overlay2/ef784a31d422124b737b9aa5a335f29f343641ccfe716a330e8b5ab90fa22f05/diff",
                "WorkDir": "/var/lib/docker/overlay2/ef784a31d422124b737b9aa5a335f29f343641ccfe716a330e8b5ab90fa22f05/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "5b7a3b752c08",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "5000/tcp": {},
                "80/tcp": {},
                "8080/tcp": {}
            },
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "ASPNETCORE_URLS=http://+:80",
                "DOTNET_RUNNING_IN_CONTAINER=true",
                "DOTNET_VERSION=3.0.3",
                "ASPNETCORE_VERSION=3.0.3"
            ],
            "Cmd": null,
            "Image": "webtarjetasparquimetros:1.0",
            "Volumes": null,
            "WorkingDir": "/app",
            "Entrypoint": [
                "dotnet",
                "BSM_WebTarjetasParquimetros.dll"
            ],
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "7ea0d57d94f8d1bacca026b2f03b3c3a34fceaaff04408546ca62ae307721a6a",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "5000/tcp": null,
                "80/tcp": null,
                "8080/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "8000"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/7ea0d57d94f8",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "7fbbf7764d3ee9efa052bfe069493a0b14eb3ca1ff3d832117a35f9ee6f810b9",
            "Gateway": "192.168.1.5",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "192.168.1.1",
            "IPPrefixLen": 24,
            "IPv6Gateway": "",
            "MacAddress": "02:42:c0:a8:01:01",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "ea46d95d34d16b264e32dae4f1815a06b1eed42a2b9ac4ef7ed8a2dd35dfa29c",
                    "EndpointID": "7fbbf7764d3ee9efa052bfe069493a0b14eb3ca1ff3d832117a35f9ee6f810b9",
                    "Gateway": "192.168.1.5",
                    "IPAddress": "192.168.1.1",
                    "IPPrefixLen": 24,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:c0:a8:01:01",
                    "DriverOpts": null
                }
            }
        }
    }
]

【问题讨论】:

    标签: c# docker .net-core dockerfile


    【解决方案1】:

    您的红隼服务器正在侦听端口 80。

    您可能需要将您的 docker run 命令更新为:

    docker run -it -p 8000:80 --name wtp webtarjetasparquimetros:1.0

    你应该可以浏览到http://localhost:8000/的帖子

    请尝试以下命令来测试 docker 端口

    $ docker port test

    旁注:

    -p 用于发布而不用于端口 -p 接受一个参数:

    使用-p 选项可以控制要分配的主机端口

    Dockerfile 有一个命令EXPOSE 它不启用或发布任何端口。但是是元数据命令。它可以帮助开发者知道这个应用最终会使用EXPOSE 命令中提到的端口。

    还有一个选项可以使用大写字母 P 发布 -P

    它不带任何参数,并在EXPOSE 命令中发布所有端口。

    因此,如果您不想混淆,请使用 -P 而不是 -p

    【讨论】:

    • @Ziaullah Khan 的回答非常简洁明了。非常感谢您,因为通过几行非常有用的解释,您不仅解决了我的问题,而且我还学到了新的 Docker 课程:)
    猜你喜欢
    • 2021-07-22
    • 2018-09-29
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    相关资源
    最近更新 更多