【Azure App Service for Container】记一次拉取镜像失败的特殊情况

Container,情况,特殊,for · 浏览次数 : 6

小编点评

## App Service For Container 拉取应用镜像失败的错误分析 根据您描述,应用镜像拉取失败,错误信息为: > Image pull failed since Inspect image returned null: xxxxxxx.azurecr.cn/dataapi:20230830V2.0 **分析原因:** * **容器镜像中使用的 UID 超出了 App Service 所在虚机允许的 UID范围。** * **在构建镜像时使用 `docker build --squash` 命令构建的 Image 中包含多层 fs layer。** * **该方法无法解决特殊owner uid的问题。** ## 解决方法: 1. **更改 base image:** * 避免使用包含特殊 owner uid 文件目录的 base image。 * 使用 `docker build -t .` 创建新的 base image,并确保其 owner 和 group 与容器相同。 2. **使用 `docker export / docker import` 生成镜像:** * 通过 `docker export` 将容器导出为 tar 文件。 * 使用 `docker import` 创建新的镜像,并使用 tar 文件作为来源。 3. **使用其他方法更改 UID:** * 使用 `find /usr/local/lib/node_modules/ ! -user root | xargs chown root:root` 重置所有用户和组 ID。 * 使用 `docker build --rm -t .` 创建新的镜像,并使用 `chown` 重置所有用户和组 ID。 4. **注意:** * 生成新的镜像时需要带简单的排版。 **参考资料:** * Docker User Namespace remapping issues : * https://azureossd.github.io/2022/06/30/Docker-User-Namespace-remapping-issues/index.html#npm-based-projects-causing-userns-remap-exceptions * `docker build --squash` 命令: * https://docs.docker.com/engine/reference/builder/#build-squash * `docker export / docker import` 命令: * https://docs.docker.com/engine/reference/commandline/docker-export/ * `docker build --rm -t .` 命令: * https://docs.docker.com/engine/reference/commandline/docker-build/#build-from-image

正文

问题描述

使用Azure App Service For Container 拉取 应用镜像,发现拉取失败。

错误消息:

“Image pull failed since Inspect image returned null: xxxxxxx.azurecr.cn/dataapi:20230830V2.0”

CreateImageAsync() for xxxxxxx.azurecr.cn/dataapi:20230830V2.0 failed with Ex : DockerApiException: Docker API responded with status code=InternalServerError, response={"message":"Get \"https://xxxxxxx.azurecr.cn/v2/dataapi/manifests/20230830V2.0 \": unauthorized: authentication required, visit https://aka.ms/acr/authorization for more information."}

 

问题解答

在App Service 的Kudu站点中检查docker日志,发现拉取镜像遇见错误

ERROR - failed to register layer: Error processing tar file(exit status 1): Container ID 1389985163 cannot be mapped to a host ID

这说明容器镜像中使用的UID ‘1389985163’ 超出了App Service 所在虚机允许的 UID范围。因在构建镜像时,使用 docker build --squash 命令构建的 Image 中仍然包含多层 fs layer。该方法无法解决特殊owner uid的问题。

 

解决方法有

方式一: 更改base image避免了引入包含特殊owner uid的文件目录

方式二:通过 docker export / docker import 的方法生成只有一层fs layer的镜像。

docker export container-id -o tarfile

docker import tarfile newimage:version

方式三:使用以下命令更改owner,并使用docker export/docker import  生成新的镜像

RUN find /usr/local/lib/node_modules/ ! -user root | xargs chown root:root

 

 

参考资料

Docker User Namespace remapping issues : https://azureossd.github.io/2022/06/30/Docker-User-Namespace-remapping-issues/index.html#npm-based-projects-causing-userns-remap-exceptions

 

与【Azure App Service for Container】记一次拉取镜像失败的特殊情况相似的内容:

【Azure App Service for Container】记一次拉取镜像失败的特殊情况

问题描述 使用Azure App Service For Container 拉取 应用镜像,发现拉取失败。 错误消息: “Image pull failed since Inspect image returned null: xxxxxxx.azurecr.cn/dataapi:20230830

【Azure 应用服务】App Service for Container 无法拉取Docker Hub中的镜像替代方案

问题描述 创建App Service Container服务,选择从Docker Hub中获取appsmith/appsmith-ce 镜像(https://www.appsmith.com/ & https://hub.docker.com/r/appsmith/appsmith-ce/tags

【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误

[500 The page cannot be displayed because an internal server error has occurred.] [scriptProcessor could not be found in "fastCGI" application configuration] [EXECUTE|500|0|0x585|CONFIG_SUCCESS|PHP7

【Azure App Service for Linux】NodeJS镜像应用启动失败,遇见 RangeError: Incorrect locale information provided

问题描述 在App Service For Linux 中,部署NodeJS应用,应用启动失败。 报错信息为: 2023-08-29T11:21:36.329731566Z RangeError: Incorrect locale information provided2023-08-29T11:

【Azure App Service】为部署在App Service上的PHP应用开启JIT编译器

问题描述 在App Service for linux上创建一个PHP应用,通过 phpinfo() 查看PHP的扩展设置,发现JIT没有被开启, jit_buffer_size 大小为0. 那么,在App Service的环境中,如何开启JIT呢? 问题解答 PHP 8在PHP的内核中添加了JIT

【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数

问题描述 在Azure App Service for Windows的环境中,部署.NET应用,其中使用了 SAP NetWeaver RFC函数 (需要加载 sapnwrfc.dll)。详细的错误为: “System.DllNotFoundException: Unable to load DL

【Azure 应用服务】在App Service for Windows中实现反向代理

问题描述 如何在App Service for Windows(.NET Stack)中,如何实现反向代理呢? 正向代理:客户端想要访问一个服务器,但是它可能无法直接访问这台服务器,这时候这可找一台可以访问目标服务器的另外一台服务器,而这台服务器就被当做是代理人的角色 ,称之为代理服务器,于是客户端

【Azure 应用服务】应用服务连接 Azure MySQL 一直失败,报错 Create connection error

问题描述 App Service上部署的Java应用,连接 Azure Database for MySQL 失败。错误信息:Create connection error, url: jdbc:mysql://....................... communications link

【Azure 应用服务】使用Docker Compose创建App Service遇见"Linux Version is too long. It cannot be more than 4000 characters"错误

{ "code":"DeploymentFailed", "message":"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-deployment-operations for usag

【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)

azure.core.exceptions.ClientAuthenticationError: Authentication failed: AADSTS70011: The provided request must include a 'scope' input parameter. The provided value for the input parameter 'scope' is