docker容器运行成功但无法访问,Django部署docker后,内部可访问,外部不可访问,解决方案

 一、 问题描述:

  1. 在服务器已经成功开启Django项目镜像,将容器8000端口映射到服务器的8000端口。

[root@hcss-ecs-2ed1 Django]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
c220bea13b90        my_django_app       "python manage.py ..."   32 minutes ago      Up 20 minutes       0.0.0.0:8000->8000/tcp              competent_dubinsky

  2. 但是通过公网IP加端口进行访问时,总是连接超时。

(Django) C:\Users\29735> curl -I http://1.92.100.245:8000/admin/
curl: (28) Failed to connect to 1.92.100.245 port 8000 after 21050 ms: Couldn't connect to server

  3. 尝试进入镜像内部命令行进行访问,访问成功。

[root@hcss-ecs-2ed1 Django]# docker exec -it c220bea13b90 bash
root@c220bea13b90:/app# curl -I http://localhost:8000/admin
HTTP/1.1 301 Moved Permanently
Date: Mon, 06 May 2024 16:18:13 GMT
Server: WSGIServer/0.2 CPython/3.10.1
Content-Type: text/html; charset=utf-8
Location: /admin/
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin
Vary: Origin

二、 解决思路:

1. 首先检测服务器公网IP是否可访问,可采用ping进行检测:

(Django) C:\Users\29735>ping 1.92.100.245

Pinging 1.92.100.245 with 32 bytes of data:
Reply from 1.92.100.245: bytes=32 time=62ms TTL=42
Reply from 1.92.100.245: bytes=32 time=56ms TTL=42
Reply from 1.92.100.245: bytes=32 time=69ms TTL=42
Reply from 1.92.100.245: bytes=32 time=52ms TTL=42

Ping statistics for 1.92.100.245:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 52ms, Maximum = 69ms, Average = 59ms

2. 若公网IP可访问,可进入项目内部bash,使用 curl -I 指令进行非跨域访问,检测项目是否正常运行。

root@c220bea13b90:/app# curl -I http://localhost:8000/admin

3. 若项目也正常运行,还可以检测源代码是否已经实现跨域,若一切都正常,可以查看是否为服务器防火墙未开放指定端口,可尝试直接关闭防火墙。使用以下代码可以开放指定端口8000。

 sudo firewall-cmd --zone=public --add-port=8000/tcp --permanent
 sudo firewall-cmd --reload
 sudo systemctl status firewalld

4. 若以上方法都没有用,就得检查服务器的安全组是否开放了指定端口(笔者就是这个问题),进入服务器的管理界面,查看安全组设置。以华为云为例:

  如果没有开放指定端口,可以自行添加。以Django后台8000端口为例:

5.Django后台添加指定端口后,如果出现拒绝访问,如下结果:

[root@hcss-ecs-2ed1 ~]#  curl -I http://1.92.100.245:8000/admin/
curl: (7) Failed connect to 1.92.100.245:8000; Connection refused

  需要进入Django项目根目录,有manage.py文件存在的目录,运行以下代码,允许所有ip访问该端口:

root@c220bea13b90:/app# python manage.py runserver 0.0.0.0:8000
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
May 07, 2024 - 00:35:03
Django version 5.0.4, using settings 'Django.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

三、 总结:

  经过以上的方法解决,就可以正常访问了。希望能解决你的问题。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值