Ubuntu上的Docker无法连接到localhost但可以连接到其ip

编程入门 行业动态 更新时间:2024-10-08 06:17:48
本文介绍了Ubuntu上的Docker无法连接到localhost但可以连接到其ip的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在运行Ubuntu 18.04

I am running Ubuntu 18.04

$ uname -r 5.3.0-46-generic

我已经安装了Docker

I have docker installed

$ docker --version Docker version 19.03.8, build afacb8b7f0

我有一个暴露端口80的简单docker镜像。生成它的Dockerfile是

I have a simple docker image that exposes port 80. The Dockerfile that generated it was

FROM mcr.microsoft/dotnet/core/aspnet:3.1 COPY publish . EXPOSE 80 ENTRYPOINT ["dotnet", "SampleWebApp.dll"]

当我为该图像运行容器时,我会看到以下内容:

When I run a container for this image I can see the following:

$ docker run myimage:latest -p 8080:80 info: Microsoft.Hosting.Lifetime[0] Now listening on: [::]:80 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Production info: Microsoft.Hosting.Lifetime[0] Content root path: /

如果我看到容器正在运行:

And if I see the containers running:

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6f5bea7b329d registry.gitlab/whatever/myimage:latest "dotnet SampleWebApp…" 4 seconds ago Up 2 seconds 80/tcp dreamy_leavitt

所以我可以看到它在端口80 / tcp上运行。 不知道为什么它不能在我要映射的端口8080上运行。

So I can see that it's running on the port 80/tcp. Not sure why it does not run on port 8080 which is where I wanted to map it.

此外, http:// [::]:80 似乎令人困惑。我已经读到了有关IPv6的内容。不知道这会带来什么后果,或者为什么普通的IPv4无法正常工作。

Also, the [::]:80 seems confusing. I've read something about it being IPv6. No idea what consequences this has or why normal IPv4 wouldn't work.

我的界面信息:

$ ifconfig docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 inet6 fe80::42:71ff:fe7f:305 prefixlen 64 scopeid 0x20<link> ether 02:42:71:7f:03:05 txqueuelen 0 (Ethernet) RX packets 131843 bytes 105630866 (105.6 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 201439 bytes 268197990 (268.1 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp3s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ether 1c:1b:0d:a4:83:16 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 118628 bytes 17999594 (17.9 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 118628 bytes 17999594 (17.9 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vethca5fd09: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::3c56:d6ff:fe0c:846 prefixlen 64 scopeid 0x20<link> ether 3e:56:d6:0c:08:46 txqueuelen 0 (Ethernet) RX packets 7 bytes 533 (533.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 52 bytes 7342 (7.3 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlp6s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.135 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::8a58:c682:3833:3bb1 prefixlen 64 scopeid 0x20<link> ether e4:be:ed:4f:0f:21 txqueuelen 1000 (Ethernet) RX packets 519710 bytes 524989683 (524.9 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 439859 bytes 165781721 (165.7 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

所以..码头接口的地址似乎是 172.17.0.1 。

So.. docker interface seems to have the address 172.17.0.1.

但是,我无法使用以下网址访问容器:

However I cannot access my container using the following urls:

$ curl localhost:8080 curl: (7) Failed to connect to localhost port 8080: Connection refused $ curl localhost:80 curl: (7) Failed to connect to localhost port 80: Connection refused $ curl 0.0.0.0:80 curl: (7) Failed to connect to 0.0.0.0 port 80: Connection refused $ curl 0.0.0.0:8080 curl: (7) Failed to connect to 0.0.0.0 port 8080: Connection refused $ curl 172.17.0.1:8080 curl: (7) Failed to connect to 172.17.0.1 port 8080: Connection refused $ curl 172.17.0.1:80 curl: (7) Failed to connect to 172.17.0.1 port 80: Connection refused $ curl 127.0.0.1:8080 curl: (7) Failed to connect to 127.0.0.1 port 8080: Connection refused $ curl 127.0.0.1:80 curl: (7) Failed to connect to 127.0.0.1 port 80: Connection refused

因此无法使用 localhost , 127.0.0.1 或docker接口IP。

so no access using localhost, 127.0.0.1 or the docker interface IP.

如果我检查容器:

If I inspect the container:

sasw@Z3:~$ docker inspect 6f5bea7b329d [ { "Id": "6f5bea7b329d05bcb534953745f376da9c7efbe54de5532f8648b618152b722a", "Created": "2020-04-20T13:06:37.883347676Z", "Path": "dotnet", "Args": [ "SampleWebApp.dll", "-p", "8080:80" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 30636, "ExitCode": 0, "Error": "", "StartedAt": "2020-04-20T13:06:38.295411125Z", "FinishedAt": "0001-01-01T00:00:00Z" }, "Image": "sha256:e00403d6c5eb3ccbe3c5c7b6ec8cf8289158e4c9fbe6ff5872ea932e69d60f38", "ResolvConfPath": "/var/lib/docker/containers/6f5bea7b329d05bcb534953745f376da9c7efbe54de5532f8648b618152b722a/resolv.conf", "HostnamePath": "/var/lib/docker/containers/6f5bea7b329d05bcb534953745f376da9c7efbe54de5532f8648b618152b722a/hostname", "HostsPath": "/var/lib/docker/containers/6f5bea7b329d05bcb534953745f376da9c7efbe54de5532f8648b618152b722a/hosts", "LogPath": "/var/lib/docker/containers/6f5bea7b329d05bcb534953745f376da9c7efbe54de5532f8648b618152b722a/6f5bea7b329d05bcb534953745f376da9c7efbe54de5532f8648b618152b722a-json.log", "Name": "/dreamy_leavitt", "RestartCount": 0, "Driver": "overlay2", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "docker-default", "ExecIDs": null, "HostConfig": { "Binds": null, "ContainerIDFile": "", "LogConfig": { "Type": "json-file", "Config": {} }, "NetworkMode": "default", "PortBindings": {}, "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": [ 0, 0 ], "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/8f56c544522ccb6556358601706cb900c405c19b47e54c25d8b3dac979100e5b-init/diff:/var/lib/docker/overlay2/81bfee49e33d9761a6ca78dfd6f3f9a54a9333b4d4fc9986e8084f6b45232f04/diff:/var/lib/docker/overlay2/c2add2cb2d687126c6826c7dd9e1c85be1473a53d6b878554aa87615701344a0/diff:/var/lib/docker/overlay2/ebd0b92c5111423fb8d1219f757e41013a1473bdbe5cf3553cecbd4337f76766/diff:/var/lib/docker/overlay2/9197af6ebe4c70f0a84c7c267b1ba069aa710d917abe9fb3fee13320a17ab765/diff:/var/lib/docker/overlay2/1f463e8667b6eecc7c251ac05316b8d5d32840bff13d9f5cb7853c88e6f1f40e/diff:/var/lib/docker/overlay2/b7c9450f53334bef02f50cc854b33140b97f4ff3d2343b3fcac7b20f647c454e/diff", "MergedDir": "/var/lib/docker/overlay2/8f56c544522ccb6556358601706cb900c405c19b47e54c25d8b3dac979100e5b/merged", "UpperDir": "/var/lib/docker/overlay2/8f56c544522ccb6556358601706cb900c405c19b47e54c25d8b3dac979100e5b/diff", "WorkDir": "/var/lib/docker/overlay2/8f56c544522ccb6556358601706cb900c405c19b47e54c25d8b3dac979100e5b/work" }, "Name": "overlay2" }, "Mounts": [], "Config": { "Hostname": "6f5bea7b329d", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "ExposedPorts": { "80/tcp": {} }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "ASPNETCORE_URLS=+:80", "DOTNET_RUNNING_IN_CONTAINER=true" ], "Cmd": [ "-p", "8080:80" ], "Image": "registry.gitlab/ddd-malaga/continuous-deployment-gitlab-docker-dotnet:latest", "Volumes": null, "WorkingDir": "", "Entrypoint": [ "dotnet", "SampleWebApp.dll" ], "OnBuild": null, "Labels": {} }, "NetworkSettings": { "Bridge": "", "SandboxID": "4e53bd2bc6cb83b7c0cba9fcdf07eb564a11ca6b955514670ba3f464aa0a96b7", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": { "80/tcp": null }, "SandboxKey": "/var/run/docker/netns/4e53bd2bc6cb", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "83976112bb202b79880777563cd1b06ef27781fd288b210b19fb499e3bf51c90", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:02", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "7589efd57cea8d2b04823657fcfc54225991bc58c93ff0e463b6f12acb28b853", "EndpointID": "83976112bb202b79880777563cd1b06ef27781fd288b210b19fb499e3bf51c90", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:02", "DriverOpts": null } } } } ]

我可以看到IP地址 172.17.0.2 。再次,我不知道它来自哪里。

I can see the IP Address 172.17.0.2. Again, I don't know where this comes from.

但是现在我可以尝试在我告诉它映射的端口上访问容器IP:

But now I can try to access the container IP at the port I told it to map:

$ curl 172.17.0.2:8080 curl: (7) Failed to connect to 172.17.0.2 port 8080: Connection refused

令人惊讶的是,如果我访问相同的容器IP,但是暴露的端口80起作用

sasw@Z3:/$ curl 172.17.0.2:80 Hello World!

如果我停止并删除完整的容器和图像,然后使用以下随机端口重试:

If I stop and delete complete container and images and try again with the following random port:

$ docker run myimage:latest -p 1234:1234 Status: Downloaded newer image for registry.gitlab/myimage:latest info: Microsoft.Hosting.Lifetime[0] Now listening on: [::]:80 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Production info: Microsoft.Hosting.Lifetime[0] Content root path: /

似乎这些端口已被完全忽略,它仍在监听容器ip和端口80

it seems those ports are completely ignored and it remains listening on the container ip and port 80

$ curl 172.17.0.2:80 Hello World!

很明显,我在这里缺少一些知识,我发现的链接不是很有用,也不是重点像这样的关于IPv6的事情 docs.docker/config/daemon/ipv6 / 提到了我什至没有的关于 /etc/docker/daemon.json 的东西。

It's clear I am missing some knowledge here and the links I find are not very useful or the point me to things about IPv6 like this docs.docker/config/daemon/ipv6/ that mentions something about a /etc/docker/daemon.json which I don't even have.

有人能指出我正确的方向以了解发生了什么以及为什么吗?谢谢!

Could anybody point me into the right direction to understand what's happening and why? Thanks!

推荐答案

似乎问题是我对 docker的参数都不运行之所以生效,是因为我将它们放置在图像之后。

It seems the problem was that none of my arguments to docker run was taking effect because I placed them AFTER the image. Insane!

所以这:

docker run myimage:latest -p 8080:80 --name whatever

将完全忽略端口映射和分配的容器运行容器

will run the container ignoring completely the port mapping and the container assigned name.

但是:

docker run -p 8080:80 --name whatever myimage:latest

将端口80映射到我的本地主机:8080可以在 https:// localhost:8080

Will map the port 80 to my localhost:8080 so that the web app is available at localhost:8080

更多推荐

Ubuntu上的Docker无法连接到localhost但可以连接到其ip

本文发布于:2023-10-16 14:05:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1497785.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:连接到   Docker   Ubuntu   localhost   ip

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!