无法连接运行在 Docker 容器中的服务器 (Mac 上的 Docker)

12

我在我的系统上运行了一个Docker容器,使用以下命令开始:

docker run -it  -v ~/some/dir -p 8000:80  3cce3211b735 bash

现在,Docker ps 列出了以下内容:

    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                             NAMES
44de7549d38e        3cce3211b735        "bash"              14 minutes ago      Up 14 minutes       22/tcp, 443/tcp, 8082/tcp, 0.0.0.0:8000->80/tcp   hardcore_engelbart

在容器内,我使用以下命令运行我的Django应用程序:python manage.py runserver 80

但我无法使用以下任何一种方式查看页面:

1.localhost:8000

2.127.0.0.1:8000

我知道我的8000端口映射到容器上的80端口。但是为什么我无法访问它呢?我正在使用 Docker for Mac 而不是 Docker Toolbox。如果您需要更多信息,请帮忙留言。


仅使用 localhost 进行连接。 - doru
@doru 映射不是问题。无论如何,感谢您的帮助。我已经写下了对我有用的答案。 - Sourav Prem
1个回答

21

好的,我解决了我的问题。问题并不在Docker端口映射中。实际问题出现在这行代码:

python manage.py runserver 80

这将在127.0.0.1:80上运行服务器。Docker容器内的本地主机并不是您机器上的本地主机。所以解决方案是使用以下命令运行服务器:

python manage.py runserver 0.0.0.0:80

在这之后,我能够访问网页。如果你遇到同样的问题,无法连接到运行在 Docker 容器内部的 Django 服务器,你应该尝试在 0.0.0.0:port 上运行服务器。你可以使用 localhost:port 在浏览器中访问它。希望对某些人有所帮助。


不幸的是,在Django 3.1.x中,0.0.0.0或127.0.0.1无法工作。已尝试使用Daphne和常规的Python manage.py runserver。 - Gajendra D Ambi
非常感谢您,先生。我花了好几天才弄明白这个问题。真的非常感激您提供的非常简单而优雅的解决方案! - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接