我正在尝试获取在Azure App Service中运行的Python Web服务器。容器通过Dockerfile创建并推送到Azure Docker Registry。为现有Azure App Service配置了持续部署,以便直接应用更改。此步骤正常工作。除了Web服务器,我已设置SSH以通过Azure门户连接到容器。这也使我可以访问Azure应用服务中的容器。
然而,如果我试图从外部(例如index.html
)从容器中运行的Web服务器获取响应,所有请求都会失败。然而,在容器内部,Web服务器正在运行并正确响应(curl localhost:8080
)
显然,使用的端口(8080)不会转发到容器,因为Web服务器在容器中运行,并且在本地运行时也可以从外部访问。
如何让Python Web服务器在Azure应用服务中运行,以便可以从外部访问它?
什么工作
- 使用Python Web应用程序创建Docker容器
- 将容器推送到Azure Docker注册表
- 持续部署到Azure应用服务
- 通过Azure Portal与容器的SSH连接
- 在容器中启动并运行Web服务器
- 在容器中通过
curl
重定向web服务器提供的index.html文件 - 本地启动容器,通过浏览器访问
index.html
什么不起作用
- 从容器外部(即从Internet)访问Web服务器提供的index.html文件
What I have tried
- 将容器内的端口号更改为8080、80、8008、8000或443(在多种配置中)(Web服务器端口、EXPOSE端口、WEBSITES_PORT设置)
- 在没有sshd服务的情况下启动web服务器
- 启用和禁用HTTPS
- 更改Azure应用服务的“仅HTTPS”、“始终开启”、“HTTP 2.0代理”和“HTTP版本”设置
- 添加值为8080的应用程序设置PORT
- 添加值为8080的应用程序设置WEBSITES_PORT
- 重新启动、重新创建和重新部署Azure应用服务
- 检查Azure门户中的日志流
- 在Azure门户中检查部署中心日志
我在研究过程中遇到的资源和建议的解决方案
- Microsoft Documentation about custom containers for Azure App Service
- A developer who may have the same problem but no solution的
- StackOverflow question about Port binding的
- An explanation of the differences of the PORT and WEBSITES_PORTS settings的
观察结果
容器启动过程失败,因为它不响应HTTP ping。
ERROR - Container <name> for site <name> did not start within expected time limit. Elapsed time = 230.2830234 sec
ERROR - Container <name> didnt respond to HTTP pings on port: 8080, failing site start. See container logs for debugging.
INFO - Stopping site <name> because it failed during startup.
字符串
在容器中,所有服务都在工作
Azure使用此命令启动Web服务中的容器
docker run -d --expose=8080 --name <name> -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false
-e WEBSITES_PORT=8080 -e WEBSITE_SITE_NAME=<app-service-name> -e WEBSITE_AUTH_ENABLED=False
-e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=<hostname> -e WEBSITE_INSTANCE_ID=<id>
-e WEBSITE_USE_DIAGNOSTIC_SERVER=False <DockerRegistry:Tag>
型
在本地使用这个命令运行容器会导致相同的结果(index.html不可达)。但是,如果我将-p 8080:8080
添加到命令中,它将工作。
1条答案
按热度按时间rhfm7lfc1#
我在我的环境中复制了相同的cloning your code。
当地答复:
的数据
的
**注意:**成功将应用程序部署到Azure App Service后,您必须运行启动命令才能访问和运行已部署的应用程序,而不会出现任何问题。
Azure App Service=> Settings=>Configuration=> General Settings
中导航到您的Web应用,然后输入**启动命令 *python3 -m http.server
**和保存。型
门户响应:
https://<app_name>.azurewebsites.net
:的