云服务器内容精选

  • 长期有效的登录指令与临时登录指令的区别是什么? 临时的登录指令代指6个小时后会过期失效,不能再被使用的登录指令。可应用在临时使用,对外单次授权等场景中,对安全性要求较高的生产集群也可通过定时刷新的方式进行使用。 长期有效的登录指令有效期为永久。可应用在前期测试、CICD流水线及容器集群拉取镜像等场景中。 获取了长期有效的登录指令后,在有效期内的临时登录指令仍然可以使用。 长期有效的登录指令与临时登录指令均不受限制,可以多台机器多人同时登录。 父主题: 登录问题
  • 镜像格式不合法或鉴权失败 问题现象:通过页面上传镜像,出现“镜像格式不合法”或“鉴权失败”的报错。 问题原因:镜像地址不规范,导致上传失败。 镜像地址各个部分的含义如下,最后的tag(版本号)可省略,如果省略则表示latest版本,其余部分均不可省略,且不可多余。 样例:swr.cn-north-4.myhuaweicloud.com/repo_namespace/repo_name:tag swr.cn-north-4.myhuaweicloud.com为 容器镜像服务 的镜像仓库地址。 repo_namespace为组织名称,命名正则表达式为^([a-z]+(?:(?:(?:_|__|[-]*)[a-z0-9]+)+)?)$,长度范围为:1-64。 repo_name:tag为镜像名称和版本号,镜像命名正则表达式为^([a-z0-9]+(?:(?:(?:_|__|[-]*)[a-z0-9]+)+)?)$,长度范围为:1-128。 您可以将镜像解压,打开文件manifest.json文件查看RepoTags字段的值是否符合上述规范。 解决方法:按照命名规范,重新给镜像打tag,然后使用docker save命令保存镜像,然后再使用页面上传。 SWR判定镜像名是否合法不是以用户在界面上传镜像时的文件名为依据,而是依据镜像包中的repositories和manifest.json文件。
  • x509: certificate signed by unknown authority 问题现象:使用docker pull拉取镜像,报错“x509: certificate signed by unknown authority”。 问题原因: 容器引擎客户端和SWR之间使用HTTPS的方式进行通信,客户端会对服务端的证书进行校验。如果客户端安装的根证书不完整,会报如下错误:“x509: certificate signed by unknown authority”。 容器引擎客户端配置了Proxy导致。 解决方法: 如果您信赖服务端,跳过证书认证,那么可以手动配置容器引擎的启动参数,配置如下(其中地址配置成需要的即可,选择一个配置即可): /etc/docker/daemon.json(如果没有可以手动创建),在该文件内添加如下配置(注意缩进,2个空格): { "insecure-registries":["镜像仓库地址"]} /etc/sysconfig/docker: INSECURE_REGISTRY='--insecure-registry=镜像仓库地址' 添加配置后执行如下命令重启:systemctl restart docker或service restart docker。 执行docker info命令,检查Proxy配置是否正确,修改为正确的Proxy配置。
  • Error response from daemon 问题现象:使用docker pull拉取官方镜像,如docker pull elasticsearch:5时,报错“Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)”。 问题原因:Docker默认的源为国外官方源,镜像拉取速度较慢,可能因超时而拉取失败。 解决方法:将Docker镜像源修改为容器 镜像服务 所提供的源,具体方法请参考设置镜像加速器。
  • Error: remote trust data does not exist 问题现象:使用docker pull拉取镜像,报错“Error: remote trust data does not exist”。 问题原因:客户端开启镜像签名验证,而镜像没有镜像签名层。 解决方法:查看“/etc/profile”文件中的环境变量是否设置了DOCKER_CONTENT_TRUST=1,如果设置了,请将其改为DOCKER_CONTENT_TRUST=0,然后执行source /etc/profile生效。
  • 为什么CCE工作负载拉取SWR内的镜像异常,且提示为“未登录”? 当CCE工作负载无法正常拉取SWR的镜像,且提示“未登录”时,请排查该工作负载的yaml文件中是否存在“imagePullSecrets”字段,且name参数值需固定为default-secret。 示例: apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: nginxspec: replicas: 1 selector: matchLabels: app: nginx strategy: type: RollingUpdate template: metadata: labels: app: nginx spec: containers: - image: nginx imagePullPolicy: Always name: nginx imagePullSecrets: - name: default-secret 父主题: 其他
  • 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个,您可以将镜像上传到已存在的组织下,也可以提交工单申请增加配额。 没有对应组织的权限:使用账号授权后,可以正常推送。授权操作请参见授权管理。
  • 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查看本地镜像,确认要上传的镜像名称及版本后,重新上传镜像。
  • 方法一:制作快照方式获得镜像 如果后续镜像没有变化,可采用方法一制作镜像。 具体操作如下: 找一台主机,安装容器引擎软件。 启动一个空白的基础容器,并进入容器。 例如:启动一个CentOS的容器。 docker run -it centos 执行安装任务。 yum install XXX git clone https://github.com/lh3/bwa.git cd bwa;make 请预先安装好Git,并检查本机是否有ssh key设置。 输入exit退出容器。 制作快照。 docker commit -m "xx" -a "test" container-id test/image:tag -a:提交的镜像作者。 container-id:步骤2中的容器id。可以使用docker ps -a查询得到容器id。 -m:提交时的说明文字。 test/image:tag:仓库名/镜像名:TAG名。 执行docker images可以查看到制作完成的容器镜像。
  • Dockerfile基本语法 FROM: 指定待扩展的父级镜像(基础镜像)。除注释之外,文件开头必须是一个FROM指令,后面的指令便在这个父级镜像的环境中运行,直到遇到下一个FROM指令。通过添加多个FROM命令,可以在同一个Dockerfile文件中创建多个镜像。 MAINTAINER: 声明创建镜像的作者信息:用户名、邮箱,非必须参数。 RUN: 修改镜像的命令,常用来安装库、安装程序以及配置程序。一条RUN指令执行完毕后,会在当前镜像上创建一个新的镜像层,接下来的指令会在新的镜像上继续执行。RUN 语句有两种形式: RUN yum update:在/bin/sh路径中执行的指令。 RUN ["yum", "update"]:直接使用系统调用exec来执行。 RUN yum update && yum install nginx:使用&&符号将多条命令连接在同一条RUN语句中。 EXPOSE: 指明容器内进程对外开放的端口,多个端口之间使用空格隔开。 运行容器时,通过设置参数-P(大写)即可将EXPOSE里所指定的端口映射到主机上其他的随机端口,其他容器或主机可以通过映射后的端口与此容器通信。 您也可以通过设置参数-p(小写)将Dockerfile中EXPOSE中没有列出的端口设置成公开。 ADD: 向新镜像中添加文件,这个文件可以是一个主机文件,也可以是一个网络文件,也可以是一个文件夹。 第一个参数:源文件(夹)。 如果是相对路径,必须是相对于Dockerfile所在目录的相对路径。 如果是URL,会将文件先下载下来,然后再添加到镜像里。 第二个参数:目标路径。 如果源文件是主机上的zip或者tar形式的压缩文件,容器引擎会先解压缩,然后将文件添加到镜像的指定位置。 如果源文件是一个通过URL指定的网络压缩文件,则不会解压。 VOLUME: 在镜像里创建一个指定路径(文件或文件夹)的挂载点,这个容器可以来自主机或者其它容器。多个容器可以通过同一个挂载点共享数据,即便其中一个容器已经停止,挂载点也仍可以访问。 WORKDIR: 为接下来执行的指令指定一个新的工作目录,这个目录可以是绝对目录,也可以是相对目录。根据需要,WORKDIR可以被多次指定。当启动一个容器时,最后一条WORKDIR指令所指的目录将作为容器运行的当前工作目录。 ENV: 设置容器运行的环境变量。在运行容器的时候,通过设置-e参数可以修改这个环境变量值,也可以添加新的环境变量。 例如: docker run -e WEBAPP_PORT=8000 -e WEBAPP_HOST=www.example.com ... CMD: 用来设置启动容器时默认运行的命令。 ENTRYPOINT: 用来指定容器启动时的默认运行的命令。区别在于:运行容器时添加在镜像之后的参数,对ENTRYPOINT是拼接,CMD是覆盖。 若在Dockerfile中指定了容器启动时的默认运行命令为ls -l,则运行容器时默认启动命令为ls -l,例如: ENTRYPOINT [ "ls", "-l"]:指定容器启动时的程序及参数为ls -l。 docker run centos:当运行centos容器时,默认执行的命令是docker run centos ls -l docker run centos -a:当运行centos容器时拼接了-a参数,则默认运行的命令是docker run centos ls -l -a 若在Dockerfile中指定了容器启动时的默认运行命令为--entrypoint,则在运行容器时如果需要替换默认运行命令,可以通过添加--entrypoint参数来替换Dockerfile中的指定。例如: docker run gutianlangyu/test --entrypoint echo "hello world" USER: 为容器的运行及RUN、CMD、ENTRYPOINT等指令的运行指定用户或UID。 ONBUILD: 触发器指令。构建镜像时,容器引擎的镜像构建器会将所有的ONBUILD指令指定的命令保存到镜像的元数据中,这些命令在当前镜像的构建过程中并不会执行。只有新的镜像使用FROM指令指定父镜像为当前镜像时,才会触发执行。 使用FROM以这个Dockerfile构建出的镜像为父镜像,构建子镜像时: ONBUILD ADD . /app/src:自动执行ADD . /app/src
  • 问题描述 假设在本地Docker客户端上制作了一个nginx镜像,版本号为v5,使用docker images命令查询SIZE为22.8MB: $ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx v5 22f2bf2e2b4f 9 days ago 22.8MB 通过客户端(即执行docker push命令)上传该镜像至SWR镜像仓库,查询大小为9.5MB。 在本地Docker客户端将镜像打包为tar格式,将nginx.tar下载至本地后,通过页面方式上传至SWR镜像仓库,查询大小为23.2MB。 可以发现,通过客户端和页面上传的镜像大小不一样。
  • 为什么登录指令执行失败? 登录指令执行失败有以下几种情况: 容器引擎未安装正确,报如下所示错误: “docker: command not found” 解决方法:重新安装容器引擎,安装方法请参见安装容器引擎。 由于容器镜像服务支持Docker容器引擎1.11.2(包含)到24.0.9(包含)版本上传镜像,建议下载对应版本。 安装容器引擎需要连接互联网,内网服务器需要绑定弹性公网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分钟之后重新尝试或通过提工单的形式,由运维工程师进行处理。 父主题: 故障类
  • 是否支持跨区域同步镜像? 目前SWR界面仅支持“华北-北京一”、“华北-北京四”、“华北-乌兰察布一”、“华东-上海一”、“华东-上海二”、“华南-广州”、“西南-贵阳一”、“中国-香港”、亚太-曼谷”、“亚太-新加坡”、“非洲-约翰内斯堡”区域同步镜像,其他区域没有此功能。 如果您想把最新推送的镜像同步到其他区域镜像仓库内,您可以先将镜像下载到本地,然后上传到需要同步区域的镜像仓库中。 父主题: 镜像同步