如何从本地部署的 AzureML 容器公开端口?

How to expose port from locally-deployed AzureML container?

我希望能够在 VSCode 中调试 运行ning entry_script.py 脚本。此代码 运行 位于通过 az ml deploy 使用自己的 docker 运行 命令创建的容器中。这是本地部署,所以我使用的部署配置如下所示:

{
    "computeType": "LOCAL",
    "port": 32267
}

我正在考虑使用 ptvsd 来设置一个 VSCode 服务器,但除了端点本身的 32267 端口之外,我还需要 expose/map 5678 端口。所以我不清楚如何映射额外的暴露端口(通常在 docker run 命令中使用 -p-P 标志)。

当然,我可以在 extra_dockerfile_steps 配置中 EXPOSE 它,但实际上不会将它映射到我可以在 VSCode 中连接 to/attach 的主机端口].

我试图确定 运行 命令并可能对其进行修改,但我无法找出 运行 命令是什么。如果我知道如何 运行 通过 AzureML 本地部署创建的图像,那么我可以修改这些标志。

最终感觉太老套了 - 如果通过 az ml deploy 或通过首选的部署配置有更受支持的方法。

这是我在 entry_script 开头使用的代码,用于通过 ptvsd 启用附件:

# 5678 is the default attach port in the VS Code debug configurations
print("Waiting for debugger attach")
ptvsd.enable_attach(address=('localhost', 5678), redirect_output=True)

不幸的是,az ml deploy local 不支持绑定除托管评分服务器的端口以外的任何端口。

构建第二个 docker 文件:

FROM [YOUR_GENERATED_IMAGE]
EXPOSE [YOUR_PORT]

来自您文件夹中的命令行:

docker build -t my_new_image .
docker run -p <port>:<port>  my_new_image

您可能需要添加额外的 运行 选项,具体取决于您需要的端口和环境变量等。

如何获取生成的图像名称:

 image = Image.create(workspace = az_ws, name=resolve_image_name(), models=[model], image_config = image_config)
image.wait_for_creation()
print("created image")
if(image.creation_state != "Succeeded"):
    raise Exception("Failed to create image.")
print("image location: {}".format(image.image_location))
artifacts = {"image_location" : image.image_location}
if(not os.path.exists("/artifacts/")):
    os.makedirs("/artifacts/")
with open("/artifacts/artifacts.json", "w") as outjson:
    json.dump(artifacts, outjson)