我使用以下依赖项工作django REST API docker镜像:
python 3.5.2,django 1.10.6,djangorestframework 3.6.2,gevent 1.2.2
在我的dockerfile中,端口5000被暴露。
docker命令:
/usr/local/bin/gunicorn --log-level=DEBUG --worker-class gevent --timeout=300 config.wsgi -w 4 -b :5000
在ECS任务定义中,5000个容器端口被转发到主机的端口80。安全组具有允许每个人都在端口80的入站规则。
当我使用此ECS任务定义运行ECS任务时,以下是应用程序日志,看起来很好。
[2017-09-13 16:45:34 +0000] [9] [INFO] Starting gunicorn 19.6.0
[2017-09-13 16:45:34 +0000] [9] [INFO] Listening at: http://0.0.0.0:5000 (9)
[2017-09-13 16:45:34 +0000] [9] [INFO] Using worker: gevent
[2017-09-13 16:45:34 +0000] [12] [INFO] Booting worker with pid: 12
[2017-09-13 16:45:34 +0000] [13] [INFO] Booting worker with pid: 13
[2017-09-13 16:45:35 +0000] [15] [INFO] Booting worker with pid: 15
[2017-09-13 16:45:35 +0000] [16] [INFO] Booting worker with pid: 16
但是我无法使用EC2实例的公共IP /公共DNS地址访问服务端点。
我尝试进入正在运行的容器并卷曲应用程序URL curl localhost:5000
。以下是我看到的日志(连接已关闭)
[2017-09-13 17:42:42 +0000] [14] [DEBUG] GET /
[2017-09-13 17:42:42 +0000] [14] [DEBUG] Closing connection.
[2017-09-13 17:42:56 +0000] [12] [DEBUG] GET /
[2017-09-13 17:42:56 +0000] [12] [DEBUG] Closing connection.
[2017-09-13 17:53:20 +0000] [14] [DEBUG] GET /users/get_mfatype/
[2017-09-13 17:53:20 +0000] [14] [DEBUG] Closing connection.
当我在本地运行时,相同的docker镜像正常工作。我甚至尝试在EC2实例中运行相同的docker镜像,这样工作正常。
我无法找到应用程序未作为ECS任务运行的根本原因。
我错过了什么吗?