Docker绑定8080端口时无法访问Host中的应用程序

Lui*_*uel 3 docker docker-for-windows docker-network

我有一个带有 Java spring boot 应用程序的 docker 映像,该应用程序在端口 8080 的 docker 容器中启动和运行没有问题,正如您在部分日志中看到的那样:

\n\n
   2020-02-24 02:09:07.906  INFO : Tomcat started on port(s): 8080 (http) with context path \'/web-app\'\n   2020-02-24 02:09:07.909  INFO : Started web-app in 7.034 seconds (JVM running for 7.601)\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我在容器内运行curl命令(使用终端),我会得到正确的响应,表明服务器正在运行并且正在运行。

\n\n
/# curl http://localhost:8080/web-app/cars/1\n{"id":"1"}\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,当我尝试访问主机上的应用程序时,问题就来了,我正在使用 Windows 10 顺便说一句(在网络浏览器中http://localhost:8080/web-app/cars/1),这里是如何我运行泊坞窗图像。

\n\n
docker run web-app -p 8080:8080\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,我不认为这是 Windows 问题,因为我可以运行一个简单的 nginx 服务器,并且可以毫无问题地在主机上访问它。

\n\n
docker run -d -p 80:80 nginx\n
Run Code Online (Sandbox Code Playgroud)\n\n

我注意到的一件事是当看到正在运行的容器时,端口列

\n\n
C:\\Users\\luis>docker ps\nCONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES\n71c99d5a2c66        nginx               "nginx -g \'daemon of\xe2\x80\xa6"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp   loving_hypatia\n86080fcce5d6        web-app            "java -jar /usr/app/\xe2\x80\xa6"    13 minutes ago       Up 13 minutes       8080/tcp             vigorous_swanso\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如您所看到的,工作容器的 PORT 列看起来像0.0.0.0:80->80/tcp,但对于非工作容器,该列看起来像8080/tcp

\n\n

这是 Dockerfile,以防它有帮助(注意我正在公开 8080 端口):

\n\n
# Building the APP from Maven image\nFROM maven:3.6.0-jdk-11-slim AS build\nCOPY src /home/app/src\nCOPY pom.xml /home/app\nRUN mvn -f /home/app/pom.xml clean package\n\n# From previous stage run the WAR created\nFROM openjdk:11-jre-slim\nCOPY --from=build /home/app/target/web-app-0.0.1-SNAPSHOT.war /usr/local/lib/web-app.jar\nEXPOSE 8080\nENTRYPOINT ["java","-jar","/usr/local/lib/web-app.jar"]\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在这里错过了什么吗?

\n\n

编辑: \n这是 docker 检查:

\n\n
C:\\Users\\luis>docker inspect a900f22848b2\n[\n    {\n        "Id": "a900f22848b21193c966bdbf2804ac7f736c4802f969624392724717983269dc",\n        "Created": "2020-02-24T02:51:55.407400538Z",\n        "Path": "java",\n        "Args": [\n            "-jar",\n            "/usr/app/web-app.jar",\n            "-p",\n            "8080:8080"\n        ],\n        "State": {\n            "Status": "running",\n            "Running": true,\n            "Paused": false,\n            "Restarting": false,\n            "OOMKilled": false,\n            "Dead": false,\n            "Pid": 4315,\n            "ExitCode": 0,\n            "Error": "",\n            "StartedAt": "2020-02-24T02:51:55.691065531Z",\n            "FinishedAt": "0001-01-01T00:00:00Z"\n        },\n        "Image": "sha256:d5c9d14f8d550fab2028370bf8e5785f26f6c5bf423b77480076f191e3f551b2",\n        "ResolvConfPath": "/var/lib/docker/containers/a900f22848b21193c966bdbf2804ac7f736c4802f969624392724717983269dc/resolv.conf",\n        "HostnamePath": "/var/lib/docker/containers/a900f22848b21193c966bdbf2804ac7f736c4802f969624392724717983269dc/hostname",\n        "HostsPath": "/var/lib/docker/containers/a900f22848b21193c966bdbf2804ac7f736c4802f969624392724717983269dc/hosts",\n        "LogPath": "/var/lib/docker/containers/a900f22848b21193c966bdbf2804ac7f736c4802f969624392724717983269dc/a900f22848b21193c966bdbf2804ac7f736c4802f969624392724717983269dc-json.log",\n        "Name": "/affectionate_ardinghelli",\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            "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                50,\n                120\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/6fb2eab78ca0d9b21e598d5d81cdb26e5039413c250801a8626cffd4a19eb17f-init/diff:/var/lib/docker/overlay2/25b7580ce520a6935c10b4acbedde883c0d0ebc676fb56525790883619ca4222/diff:/var/lib/docker/overlay2/94a2a6c5df74fb9ef6dc3dfb31cc75ed2c7f4d56f2f0e6b8bbad15d5032ad1b4/diff:/var/lib/docker/overlay2/6d09c5ef421eb410fdaf02da239d85b04154bf7b9b6a99c36addd8e2ff0b1479/diff:/var/lib/docker/overlay2/b45789110f7591e23d54469c6eb1479f3b2719b57cb31b344d09e3e057d372b0/diff:/var/lib/docker/overlay2/24daf4027a52517c1e6f166cbd61f19c713dcee101c95ec6bd0e0eb0b3590507/diff:/var/lib/docker/overlay2/340750e0a675235dd75be936c08b3768c5cb558ca4210ec8668949633e010040/diff:/var/lib/docker/overlay2/bf04da8ac060038ee92ea1d52cd46a261cae8a3a0b6428424a1d96de808f245a/diff:/var/lib/docker/overlay2/58b7232b6311cd78cd55f8d6153a9178cd93e3126997c4aa6aa0536206c58a31/diff",\n                "MergedDir": "/var/lib/docker/overlay2/6fb2eab78ca0d9b21e598d5d81cdb26e5039413c250801a8626cffd4a19eb17f/merged",\n                "UpperDir": "/var/lib/docker/overlay2/6fb2eab78ca0d9b21e598d5d81cdb26e5039413c250801a8626cffd4a19eb17f/diff",\n                "WorkDir": "/var/lib/docker/overlay2/6fb2eab78ca0d9b21e598d5d81cdb26e5039413c250801a8626cffd4a19eb17f/work"\n            },\n            "Name": "overlay2"\n        },\n        "Mounts": [],\n        "Config": {\n            "Hostname": "a900f22848b2",\n            "Domainname": "",\n            "User": "",\n            "AttachStdin": false,\n            "AttachStdout": true,\n            "AttachStderr": true,\n            "ExposedPorts": {\n                "8080/tcp": {}\n            },\n            "Tty": false,\n            "OpenStdin": false,\n            "StdinOnce": false,\n            "Env": [\n                "PATH=/usr/local/openjdk-11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",\n                "LANG=C.UTF-8",\n                "JAVA_HOME=/usr/local/openjdk-11",\n                "JAVA_VERSION=11.0.6",\n                "JAVA_BASE_URL=https://github.com/AdoptOpenJDK/openjdk11-upstream-binaries/releases/download/jdk-11.0.6%2B10/OpenJDK11U-jdk_",\n                "JAVA_URL_VERSION=11.0.6_10"\n            ],\n            "Cmd": [\n                "-p",\n                "8080:8080"\n            ],\n            "Image": "web-app",\n            "Volumes": null,\n            "WorkingDir": "",\n            "Entrypoint": [\n                "java",\n                "-jar",\n                "/usr/app/web-app.jar"\n            ],\n            "OnBuild": null,\n            "Labels": {}\n        },\n        "NetworkSettings": {\n            "Bridge": "",\n            "SandboxID": "042d90c5fd29fcb620f3e021c7c4459a34caed47e50b3f183830543dd103826f",\n            "HairpinMode": false,\n            "LinkLocalIPv6Address": "",\n            "LinkLocalIPv6PrefixLen": 0,\n            "Ports": {\n                "8080/tcp": null\n            },\n            "SandboxKey": "/var/run/docker/netns/042d90c5fd29",\n            "SecondaryIPAddresses": null,\n            "SecondaryIPv6Addresses": null,\n            "EndpointID": "abcdee85d18be541a47c8c4a2f3aa8d4eca0b60bc11a635566b433ea0c59149b",\n            "Gateway": "172.17.0.1",\n            "GlobalIPv6Address": "",\n            "GlobalIPv6PrefixLen": 0,\n            "IPAddress": "172.17.0.4",\n            "IPPrefixLen": 16,\n            "IPv6Gateway": "",\n            "MacAddress": "02:42:ac:11:00:04",\n            "Networks": {\n                "bridge": {\n                    "IPAMConfig": null,\n                    "Links": null,\n                    "Aliases": null,\n                    "NetworkID": "82786fd4bcc39ea0c53918c2a61b5299dd51fe2239b0a02122bd8fda14a1ac2d",\n                    "EndpointID": "abcdee85d18be541a47c8c4a2f3aa8d4eca0b60bc11a635566b433ea0c59149b",\n                    "Gateway": "172.17.0.1",\n                    "IPAddress": "172.17.0.4",\n                    "IPPrefixLen": 16,\n                    "IPv6Gateway": "",\n                    "GlobalIPv6Address": "",\n                    "GlobalIPv6PrefixLen": 0,\n                    "MacAddress": "02:42:ac:11:00:04",\n                    "DriverOpts": null\n                }\n            }\n        }\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

]

\n

Lui*_*uel 6

端口映射不起作用只是因为我以错误的顺序设置了它。

正确的做法:

docker run -p 8080:8080 web-app 
Run Code Online (Sandbox Code Playgroud)

我运行容器和端口映射的方式不起作用。

docker run web-app -p 8080:8080
Run Code Online (Sandbox Code Playgroud)