首页 > 解决方案 > Azure App Service:在容器端指定 docker run 端口

问题描述

我想在 Linux 上的 Azure 应用服务(容器的 Web 应用)上使用scrapinghub/splash容器。
但是deploy上的docker run命令会随机改变容器端的绑定端口(见下面的日志,8961端口是自动分配的。这个数字每次部署都不一样)

2020-01-21 08:56:47.494 信息-docker run -d -p 8961:8050 --name b2scraper-splash_3_d89ce1f2 -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITES_PORT=8050 -e WEBSITE_SITE_NAME=b2scraper-splash -e -_AUSITE_TH e PORT=8050 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=b2scraper-splash.azurewebsites.net -e WEBSITE_INSTANCE_ID=5446f93a2cbcb25300f091395c54ce738773ce47489c2818322ffabbc23e3413 scrapinghub/splash:latest python3 /app/bin/splash --proxy-profiles-path /etc/splash/proxy -profiles --js-profiles-path /etc/splash/js-profiles --filters-path /etc/splash/filters --lua-package-path "/etc/splash/lua_modules/?.lua" --disable -私有模式--端口 8050

使用 WEBSITES_PORT 可以更改主机端口绑定,但似乎无法更改容器端。
有没有办法像-p 8050:80-p 8050:443命令一样修复容器端端口绑定docker run

例如,可以在 Azure Container Instances 上使用容器,而无需更改服务端口 8050。

标签: pythondockerscrapysplash-screenazure-web-app-service

解决方案


docker run 命令中的 --publish 创建一个防火墙规则,将容器端口映射到 Docker 主机上的端口。

https://docs.docker.com/config/containers/container-networking/

对于命令:docker run -d -p 8961:8050 imagename,容器中的TCP端口8050映射到Docker Host上的8961。在应用服务上,无法更改此 docker run 命令。可以使用 WEBSITES_PORT 应用程序设置将容器端口(在本例中为 8050)设置为特定值。


推荐阅读