云服务器内容精选

  • 操作步骤 参考获取docker容器引擎的长期有效登录指令中的步骤1设置编程访问权限。 参考获取docker容器引擎的长期有效登录指令中的步骤2至步骤4获取资源空间名、镜像仓库地址、AK以及登录密钥信息。 使用如下的格式拼接长期拉取和推送镜像的指令。 1. 镜像拉取指令拼接 ctr image pull --user [资源空间名]@[AK]:[登录密钥] [镜像仓库地址] 其中,资源空间名和镜像仓库地址在2中获取,AK在3中获取,登录密钥为4的执行结果。 2. 镜像推送指令拼接 ctr image push --user [资源空间名]@[AK]:[登录密钥] [镜像仓库地址] 其中,资源空间名和镜像仓库地址在2中获取,AK在3中获取,登录密钥为4的执行结果。 登录密钥字符串是经过加密的,无法将登录密钥字符串逆向解密成SK。 获取的指令可在其他机器上使用并进行镜像上传下载。
  • docker容器引擎客户端 制作容器镜像或导入镜像文件。 连接 容器镜像服务 。 登录容器 镜像服务 控制台。 选择左侧导航栏的“总览”,单击页面右上角的“登录指令”,在弹出的页面中单击复制登录指令。 图1 登录指令 此处生成的登录指令有效期为6小时,若需要长期有效的登录指令,请参见获取长期有效登录指令。获取了长期有效的登录指令后,在有效期内的临时登录指令仍然可以使用。 登录指令末尾的 域名 为镜像仓库地址,请记录该地址,后面会使用到。 在安装容器引擎的机器中执行上一步复制的登录指令。 登录成功会显示“Login Succeeded”。 在安装容器引擎的机器上执行如下命令,为nginx镜像打标签。 docker tag [镜像名称1:版本名称1] [镜像仓库地址]/[组织名称]/[镜像名称2:版本名称2] 其中, [镜像名称1:版本名称1]:请替换为您所要上传的实际镜像的名称和版本名称。 [镜像仓库地址]:可在SWR控制台上查询,即2.b中登录指令末尾的域名。 [组织名称]:请替换为您创建的组织。 [镜像名称2:版本名称2]:请替换为您期待的镜像名称和镜像版本。 示例: docker tag nginx:v1 swr.cn-east-3.myhuaweicloud.com/cloud-develop/nginx:v1 上传镜像至镜像仓库。 docker push [镜像仓库地址]/[组织名称]/[镜像名称2:版本名称2] 示例: docker push swr.cn-east-3.myhuaweicloud.com/cloud-develop/nginx:v1 终端显示如下信息,表明上传镜像成功。 The push refers to repository [swr.cn-east-3.myhuaweicloud.com/cloud-develop/nginx:v1] fbce26647e70: Pushed fb04ab8effa8: Pushed 8f736d52032f: Pushed 009f1d338b57: Pushed 678bbd796838: Pushed d1279c519351: Pushed f68ef921efae: Pushed v1: digest: sha256:0cdfc7910db531bfa7726de4c19ec556bc9190aad9bd3de93787e8bce3385f8d size: 1780 返回容器镜像服务控制台,在“我的镜像”页面,执行刷新操作后可查看到对应的镜像信息。
  • 操作场景 客户端上传镜像,是指在安装了容器引擎客户端的机器上使用docker命令或者ctr命令将镜像上传到容器镜像服务的镜像仓库。如果是docker容器引擎客户端则使用docker push命令上传。如果是containerd容器引擎客户端则使用ctr push命令上传。 如果容器引擎客户端机器为云上的E CS 或CCE节点,根据机器所在区域有两种网络链路可以选择: 若机器与容器镜像仓库在同一区域,则上传镜像走内网链路。 若机器与容器镜像仓库不在同一区域,则上传镜像走公网链路,机器需要绑定弹性公网IP。
  • 安装容器引擎 您可以根据自己的操作系统选择对应的安装步骤: Linux操作系统下安装 EulerOS操作系统下安装 Linux操作系统下安装 在Linux操作系统下,可以使用如下命令快速安装Docker的最新稳定版本。如果您想安装其他特定版本的Docker,可参考安装Docker。 curl -fsSL get.docker.com -o get-docker.sh sh get-docker.sh sudo systemctl daemon-reload sudo systemctl restart docker EulerOS操作系统下安装 在EulerOS操作系统下,安装容器引擎的方法如下: 登录弹性云服务器。 配置yum源。 如果您的机器上还没有配置yum源,可以参照如下方法配置:如何使用自动化工具配置华为云镜像源(x86_64和ARM)?如果已配置,可跳过该步骤。 安装并运行容器引擎。 获取yum源里的docker-engine包。 yum search docker-engine 使用yum install -y命令安装上一步获取的docker-engine包,x86架构示例: yum install docker-engine.x86_64 -y 设置开机启动Docker服务。 systemctl enable docker 启动Docker。 systemctl start docker 检查安装结果。 docker --version 回显如下类似信息,表示容器引擎安装成功。 Docker version 18.09.0, build 384e3e9
  • 操作场景 通过docker pull命令下载Docker Hub的公开镜像时,往往会因为网络原因而需要很长时间,甚至可能因超时而下载失败。为此,容器镜像服务提供了镜像下载加速功能,帮助您获得更快的下载体验。 SWR镜像加速器是面向个人开发者的服务,仅限于支持个人开发场景,不允许有再次封装或商业用途。 面向生产环境使用场景,为避免Docker访问网络问题导致的镜像拉取失败,建议您在生产环境中慎重考虑对Docker Hub容器镜像的依赖,将需要的镜像从Docke Hub同步到SWR私有仓库使用。 根据Docker公司政策,2020年11月01日起将逐步向Docker Hub匿名和免费用户实施速率和拉取请求次数限制。SWR镜像加速器无法保证一定拉取到所有的镜像版本,建议您将需要的镜像从Docke Hub同步到SWR私有仓库使用。关于Docker Hub收费标准、访问限制的详细介绍,请参见Docker官方网站。
  • 操作场景 如果您需要对容器镜像服务进行权限管理,您可以使用 统一身份认证 服务 IAM ,设置权限的方法请参见创建用户并授权使用SWR。当您具有SWR Admin或者Tenant Administrator系统权限时,您就拥有了SWR的管理员权限,可以在SWR中为其他IAM用户进行授权。 拥有SWR管理员权限的用户,默认拥有所有组织下的镜像管理权限,即使该用户不在组织的授权用户列表中。 如果您没有SWR的管理员权限,就需要已拥有SWR管理员权限的用户在SWR中进行授权管理,为您添加对某个镜像的权限或对某个组织中所有镜像的权限。 场景示例: 示例一:我是拥有ServiceStage Developer权限(SWR只读权限)的IAM用户,想要下载SWR管理员所创建的“group”组织下的“nginx”镜像。 策略:SWR管理员在“nginx”镜像详情中为您授予“读取”权限,授权完成后,您将享有下载该镜像的权限。 示例二:我是SWR管理员,需要给公司外部员工授权一个组织的镜像上传权限,但是不允许他登录控制台,只能通过Docker客户端push镜像。 策略:您在组织详情“用户”页签下为该员工授予“编辑”权限,并且在IAM中设置访问方式为“编程访问”。 图1 修改访问方式示例
  • 授权方法 容器镜像服务中给IAM用户添加权限有如下两种方法: 在镜像详情中添加授权,授权完成后,IAM用户享有读取/编辑/管理该镜像的权限。 在组织中添加授权,使IAM用户对组织内所有镜像享有读取/编辑/管理的权限。 图2 用户权限 容器镜像服务中为用户添加的权限有如下三种类型: 读取:只能下载镜像,不能上传。 编辑:下载镜像、上传镜像、编辑镜像属性以及添加触发器。 管理:下载镜像、上传镜像、删除镜像或版本、编辑镜像属性、添加授权、添加触发器以及共享镜像。 页面上传镜像功能要求具备组织的编辑或管理权限,在镜像详情中添加的编辑或管理权限不支持页面上传镜像。
  • 单个镜像同步 登录容器镜像服务控制台。 在左侧导航栏选择“我的镜像”,单击右侧镜像名称。 在镜像详情页面单击右上角“镜像自动同步”。 单击图标,选择目标区域和目标组织,然后单击“确定”完成添加。 图1 添加镜像自动同步 目标区域:选择同步的目标区域,例如“华北-北京一”。 目标组织:选择同步的目标组织。 覆盖: 勾选则表示覆盖,同步相同名称相同版本的镜像时,同步后会替换已有的镜像版本。 不勾选则表示不覆盖,同步相同名称相同版本的镜像时,会取消同步并提示已存在相同版本镜像。 在镜像详情页面的“镜像同步记录”页签下,可查看镜像同步启动时间、镜像版本、状态、同步类型、同步耗时等。
  • 为什么登录指令执行失败? 登录指令执行失败有以下几种情况: 容器引擎未安装正确,报如下所示错误: “docker: command not found” 解决方法:重新安装容器引擎,安装方法请参见安装容器引擎。 由于容器镜像服务支持容器引擎1.11.2及以上版本上传镜像,建议下载对应版本。 安装容器引擎需要连接互联网,内网服务器需要绑定弹性公网IP后才能访问。 临时登录指令已过期或登录指令中区域项目名称、AK、登录密钥错误,报如下所示错误: “unauthorized: authentication required” 解决方法:登录容器镜像服务控制台,在左侧菜单栏选择“我的镜像”,单击右侧“客户端上传”获取登录指令。 获取临时的登录指令:单击“生成临时登录指令”,在弹出的页面中单击复制登录指令。 获取长期有效的登录指令:单击“如何获取长期有效登录指令”,具体方法请参见获取长期有效登录指令。 登录指令中镜像仓库地址错误,报如下所示错误: “Error llgging in to v2 endpoint, trying next endpoint: Get https://{{endpoint}}/v2/: dial tcp: lookup {{endpoint}} on xxx.xxx.xxx.xxx:53 : no such host” 解决方法: 修改登录指令中的镜像仓库地址。 镜像仓库地址格式 : swr.区域项目名称.myhuaweicloud.com,如“华北-北京四”对应的镜像仓库地址为swr.cn-north-4.myhuaweicloud.com。 获取临时的登录指令:方法请参见2。 x509: certificate has expired or is not yet valid 长期有效登录指令中AK/SK被删除导致,请使用有效的AK/SK生成登录指令。 x509: certificate signed by unknown authority 问题原因: 容器引擎客户端和SWR之间使用HTTPS的方式进行通信,客户端会对服务端的证书进行校验。如果服务端证书不是权威机构颁发的,则会报如下错误:x509: certificate signed by unknown authority 解决方法: 如果用户信赖服务端,跳过证书认证,那么可以手动配置Docker的启动参数,配置方法如下: CentOS: 修改“/etc/docker/daemon.json”文件(如果没有,可以手动创建),在该文件内添加如下内容: { "insecure-registries": ["{镜像仓库地址}"] } Ubuntu: 修改“/etc/default/docker”文件,在DOCKER_OPTS配置项中增加如下内容: DOCKER_OPTS="--insecure-registry {镜像仓库地址}" EulerOS: 修改“/etc/sysconfig/docker”文件,在INSECURE_REGISTRY配置项中增加如下内容: INSECURE_REGISTRY='--insecure-registry {镜像仓库地址}' 镜像仓库地址支持域名和IP形式。 域名:swr.区域项目名称.myhuaweicloud.com。例如“华北-北京四”的镜像仓库地址为:swr.cn-north-4.myhuaweicloud.com。 IP:可通过ping镜像仓库地址(域名形式)获取。 配置完成后,执行systemctl restart docker重启容器引擎。 denied: Authenticate Error 用户无编程访问权限,需要使用管理员账号登录IAM,修改用户访问方式。 denied: Not allow to login、upload or download image 用户大批量并发上传镜像或者攻击服务,系统把用户拉黑,用户无法登录和上传下载镜像。请在30分钟之后重新尝试或通过提工单的形式,由运维工程师进行处理。 父主题: 故障类
  • tag does not exist: xxxxxx或An image does not exist locally with the tag: xxxxxx 问题现象:使用客户端上传镜像,报如下所示错误: “tag does not exist: xxxxxx” 或 “An image does not exist locally with the tag: xxxxxx” 问题原因:上传的镜像或镜像版本不存在。 解决方法:通过docker images查看本地镜像,确认要上传的镜像名称及版本后,重新上传镜像。
  • name invalid: 'repository' is invalid 问题现象:使用客户端上传镜像,报如下所示错误: “name invalid: 'repository' is invalid” 问题原因:组织命名或镜像命名不规范。 解决方法:以下分别是组织名(namespace)和仓库名(repository)的命名正则表达式: namespace:^([a-z]+(?:(?:(?:_|__|[-]*)[a-z0-9]+)+)?)$,长度范围为:1-64; repository:^([a-z0-9]+(?:(?:(?:_|__|[-]*)[a-z0-9]+)+)?)$,长度范围为:1-128。 您可以按照上述命名规范,重新指定上传的组织和镜像名称。
  • denied: Image organization does not exist, you should create it first 问题现象:使用客户端上传镜像,报如下所示错误: “denied: Image organization does not exist, you should create it first” 问题原因:docker push命令中的组织名称不存在。 解决方法:请先创建组织,再重新上传。
  • denied: you do not have the permission 问题现象:使用客户端上传镜像,报如下所示错误: “denied: you do not have the permission” 问题原因: 该组织名已被其他用户注册或当前SWR组织数量已超过配额。 docker login命令使用IAM用户的AK、SK生成,没有对应组织的权限。 解决方法: 该组织名已被其他用户注册时:建议您先创建组织然后再上传镜像,创建组织的方法请参见创建组织。 SWR组织数量超过配额时:单个用户的组织数量限制为5个,您可以将镜像上传到已存在的组织下,也可以提交工单申请增加配额。 没有对应组织的权限:使用账号授权后,可以正常推送。授权操作请参见授权管理。
  • 操作步骤 下载image-syncer到执行机上,解压并运行工具。 以v1.3.1版本为例,您也可以选择其他版本。 wget https://github.com/AliyunContainerService/image-syncer/releases/download/v1.3.1/image-syncer-v1.3.1-linux-amd64.tar.gz tar -zvxf image-syncer-v1.3.1-linux-amd64.tar.gz 创建镜像仓库的认证信息文件auth.json。 image-syncer支持基于Docker Registry V2搭建的docker镜像仓库,按格式填写即可。将源仓库及目标仓库认证信息写入,示例如下。 { "swr.××××.myhuaweicloud.com": { "username": "××××@F1I3Q……", "password": "2fd4c869ea0……" }, "swr.××××.myhuaweicloud.com": { "username": "××××@4N3FA……", "password": "f1c82b57855f9d35……" } 其中swr.××××.myhuaweicloud.com 为镜像仓库地址,username、password可以在登录命令中获取,获取方法如下: 登录SWR控制台,在总览页面右上角单击“登录指令”,在弹出的窗口中获取登录指令,如下图所示。 图1 登录指令 创建同步镜像描述文件images.json。 如下示例,左边是源仓库的地址,右边是目的仓库地址。image-syncer还支持其他描述方式,具体请参见README-zh_CN.md。 { "swr.cn-north-4.myhuaweicloud.com/org-ss/canary-consumer": "swr.cn-east-3.myhuaweicloud.com/dev-container/canary-consumer" } 执行如下命令将镜像迁移至SWR。 ./image-syncer --auth=./auth.json --images=./images.json --namespace=dev-container --registry=swr.cn-east-3.myhuaweicloud.com --retries=3 --log=./log 表1 命令行参数说明 参数 说明 --config 设置用户提供的配置文件路径,使用之前需要创建此文件,默认为当前工作目录下的config.json文件。这个参数与 --auth和--images 的作用相同,分解成两个参数可以更好地区分认证信息与镜像仓库同步规则。建议使用 --auth 和 --images。 --images 设置用户提供的镜像同步规则文件所在路径,使用之前需要创建此文件,默认为当前工作目录下的images.json文件。 --auth 设置用户提供的认证文件所在路径,使用之前需要创建此认证文件,默认为当前工作目录下的auth.json文件。 --log 打印出来的log文件路径,默认打印到标准错误输出,如果将日志打印到文件将不会有命令行输出,此时需要通过cat对应的日志文件查看。 --namespace 设置默认的目标namespace,当配置文件内一条images规则的目标仓库为空,并且默认registry也不为空时有效,可以通过环境变量DEFAULT_NAMESPACE设置,同时传入命令行参数会优先使用命令行参数值。 --proc 并发数,进行镜像同步的并发goroutine数量,默认为5。不建议修改该参数。 --retries 失败同步任务的重试次数,默认为2,重试会在所有任务都被执行一遍之后开始,并且也会重新尝试对应次数生成失败任务的生成。一些偶尔出现的网络错误比如io timeout、TLS handshake timeout,都可以通过设置重试次数来减少失败的任务数量。 --registry 设置默认的目标registry,当配置文件内一条images规则的目标仓库为空,并且默认namespace也不为空时有效,可以通过环境变量DEFAULT_REGISTRY设置,同时传入命令行参数会优先使用命令行参数值。 迁移命令执行后,可登录目标镜像仓库,查看已迁移的镜像。
  • 操作步骤 从源仓库下载镜像。 使用docker pull命令下载镜像。 示例:docker pull nginx:latest 使用docker images命令查看是否下载成功。 # docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 22f2bf2e2b4f 5 hours ago 22.8MB 将步骤1中下载的镜像上传到SWR。 登录到目标端容器所在虚拟机,并登录SWR。详细步骤请参考客户端上传镜像。 给镜像打标签。 docker tag [镜像名称:版本名称] [镜像仓库地址]/[组织名称]/[镜像名称:版本名称] 示例: docker tag nginx:v1 swr.cn-east-3.myhuaweicloud.com/cloud-develop/nginx:v1 上传镜像至目标镜像仓库。 docker push [镜像仓库地址]/[组织名称]/[镜像名称:版本名称] 示例: docker push swr.cn-east-3.myhuaweicloud.com/cloud-develop/nginx:v1 终端显示如下信息,表明上传镜像成功。 The push refers to repository [swr.cn-east-3.myhuaweicloud.com/cloud-develop/nginx:v1] fbce26647e70: Pushed fb04ab8effa8: Pushed 8f736d52032f: Pushed 009f1d338b57: Pushed 678bbd796838: Pushed d1279c519351: Pushed f68ef921efae: Pushed v1: digest: sha256:0cdfc7910db531bfa7726de4c19ec556bc9190aad9bd3de93787e8bce3385f8d size: 1780 返回容器镜像服务控制台,在“我的镜像”页面,执行刷新操作后可查看到对应的镜像信息。