无法连接Docker中的本地主机

juud5qan  于 2022-11-03  发布在  Docker
关注(0)|答案(8)|浏览(369)

我在码头终端运行图像:

docker run -p 4000:80 friendlyhello

Localhost不连接和显示图像。
无法访问此站点
localhost拒绝连接。

qlckcl4x

qlckcl4x1#

我想也许你在Windows上的浏览器中访问http://localhost:4000,那么你应该使用Docker默认的机器ip(通常是192.168.99.100)。

hpcdzsge

hpcdzsge2#

我也遇到过这个问题,在documentation的下面这部分解决了:
注意:如果您在Windows 7上使用Docker工具箱,请使用Docker机器IP而不是localhost。例如,http://192.168.99.100:4000/。要查找IP地址,请使用命令docker-machine ip。

ne5o7dgx

ne5o7dgx3#

如果您在Docker容器中运行nodejs应用程序,请尝试使用“0.0.0.0”而不是“localhost”。
示例:假设您的应用程序在端口3000上运行

server.listen(3000, 'localhost' () => {

console.log('listening for requests on port 3000');

});

server.listen(3000, '0.0.0.0' () => {

console.log('listening for requests on port 3000');

});

那么您可以在Docker中将端口Map到您Web应用程序。

docker run -p 4000:3000 --name 'your_container_name' 'your_image_name'

在您的cmd或终端上使用以下命令启动容器并查看端口。

docker port <your_container_name>
pftdvrlh

pftdvrlh4#

我也有这个错误使用docker的windows。
尽管多次尝试,它并没有解决玩端口号和图像重建,或完全擦除码头集装箱。
我花了一段时间才解决,所以想为大家节省一些时间。
1-输入命令Run docker network ls
查找与以下内容类似的输出-

Network ID       Name   Driver    Scope
   cd6a217449e3     nat    nat       local

2-复制网络ID
3-输入命令docker network inspect THENETWORKID
4-您将在屏幕上收到一些类似json输出的输出,请查找类似以下内容的文本:-

"Containers": {

"4b953b6a597e38eac1de39119d30fb4c87bca6faae7da444b02e223685eed5c7": {

"Name": "jolly_rosalind",

"EndpointID": "5919da54af323505e18d9807742fd12bb3acbe260dcee28911ffdf56fb905baf",

"MacAddress": "00:15:5d:3c:50:58",

"IPv4Address": "172.30.49.218/16",

"IPv6Address": ""

}

5-在Web浏览器中输入“http://THEIPV4ADDRESS:5000/”,您可能会看到一个漂亮的“0”。
祝您好运!

jei2mxaa

jei2mxaa5#

有了那个docker run命令,你应该从你的主机上用http://127.0.0.1:4000访问容器,就像@Black在评论上说的那样,不管怎么说,你的“friendlyhello”图像到底是什么?因为在dockerhub上有很多“friendlyhello”图像,但是你的却不是其中的任何一个,没有官方的friendlyhello图像,你能把你的Dockerfile放进去吗?不管怎么说,假设一个标准的“friendlyhello”将在端口80上运行一个带有Hello World欢迎页面的Web服务器。2它应该可以工作。
我已经用docker run -p 4000:80 movila/friendlyhello进行了测试,并且正在为我工作。
如果不为您工作,听起来像是您有某种iptables问题。重新启动您的机器以恢复iptables规则(Docker自动完成),然后重试。
另一种可能是直接访问容器的ip而不是主机的ip。当你启动你的docker容器时,如果你没有指定-d参数,它会让你的终端打印它的日志。在那个日志上有一个ip。那个ip就是容器的ip。我的日志的例子:


* Running on http://0.0.0.0:80/ (Press CTRL+C to quit)

172.17.0.1 - - [10/May/2017 07:13:53] "GET / HTTP/1.1" 200 -
172.17.0.1 - - [10/May/2017 07:13:53] "GET /favicon.ico HTTP/1.1" 404 -

您可以尝试使用http://172.17.0.1来访问它。

cnjp1d6j

cnjp1d6j6#

如果您可以共享Docker版本和您正在使用的操作系统,那将是一件好事。同时,请尝试以下步骤:
1.检查容器是否实际运行在端口80上
1.请尝试http://{CONTAINER_IP}:4000/,而不要使用http://localhost:4000。您应该通过以下方式获取容器IP
docker inspect -f '{{范围.网络设置.网络}}{{. IP地址}}{{结束}}'容器名称或标识
1.也许你的应用程序是在HTTPS上。也试试看

n1bvdmb6

n1bvdmb67#

我通过安装并启动docker-machine解决了MacOS上的这种情况。这是因为在MacOS上运行Docker需要一个虚拟机。
另一种方法是使用Docker Desktop

mkshixfv

mkshixfv8#

即使是我也面临着同样的问题,在实现了下面的解决方案后,我用Docker IP地址替换了“localhost”,它对我来说工作得很好。只要分配端口,并使用下面的url http://192.168.99.100:5050/而不是http://localhost:5050。只要用“5050”替换你的端口号,它就会工作得很好。

  • 我想也许你在Windows上的浏览器中访问http://localhost:4000,那么你应该使用Docker默认的机器IP(通常是192.168.99.100)。只是尝试 *

相关问题