# 本地调试指南

# Case 1:使用代码构建,部署失败 - 服务无法正常拉起

# 1. 查看部署失败版本对应的本地调试指引

  • 进入版本配置页面

  • 进入本地调试指引页面

# 2. 拉取镜像到本地

为了将部署失败版本的镜像拉取到本地进行调试,需要先登录到 Registry。

  • 登录腾讯云 Docker Registry
$ docker login --username=1000088888888 ccr.ccs.tencentyun.com
Password:
Login Succeeded  # 登录成功提示

如出现报错,可查看常见问题

  • 输入密码登录(如已忘记仓库密码,可在指引页面跳转到重置密码页面)

  • 从 Registry 拉取镜像

$ docker pull ccr.ccs.tencentyun.com/tcb-1000088888888-abcd/env-abcdefg123_fail-demo:fail-demo-001-1612497814
fail-demo-001-1612497814: Pulling fromtcb-1000088888888-abcd/env-abcdefg123_fail-demo
4c0d98bf9879: Pull complete
d9d36136d317: Pull complete
8cde4a21744b: Pull complete
Digest: sha256:00f4849f507bab816f9e2ff205eedb9a8f101e58be8e05e44807487955dc0988
Status: Downloaded newer image for ccr.ccs.tencentyun.com/tcb-1000088888888-abcd/env-abcdefg123_fail-demo:fail-demo-001-1612497814
ccr.ccs.tencentyun.com/tcb-1000088888888-abcd/env-abcdefg123_fail-demo:fail-demo-001-1612497814

# 3. 定位问题

  • 查看下载好的镜像
$ docker image ls
REPOSITORY                                                                         TAG                        IMAGE ID       CREATED          SIZE
ccr.ccs.tencentyun.com/tcb-1000088888888-abcd/env-abcdefg123_fail-demo       fail-demo-001-1612497814   ebf4bc3609b1   30 minutes ago   12.5MB
  • 拉起服务定位问题
// 注: 8888:80 - 将容器服务的80端口映射到本地8888端口
$ docker run -p 8888:80 ccr.ccs.tencentyun.com/tcb-1000088888888-abcd/env-abcdefg123_fail-demo:fail-demo-001-1612497814
panic: this is fail demo test
goroutine 1 [running]:
main.main()
    /app/helloworld.go:17 +0x39

# 4. 解决问题

由于服务无法正常拉起,使用docker run拉起镜像时如有异常将抛出错误,根据错误可定位到代码异常具体的行数,修复后重新构建即可。

# Case 2:使用镜像,部署失败 - 逻辑问题查日志定位

# 1. 查看部署失败版本对应的本地调试指引

  • 进入版本配置页面

  • 进入本地调试指引页面

# 2. 拉取镜像到本地

  • 登录腾讯云 Docker Registry
$ docker login --username=1000088888888 ccr.ccs.tencentyun.com
Password:
Login Succeeded # 登录成功提示

如出现报错,可查看常见问题

  • 输入密码登录(如已忘记仓库密码,可在指引页面跳转到重置密码页面)

  • 从 registry 拉取镜像

$ docker pull ccr.ccs.tencentyun.com/tcb-1000088888888-abcd/env-abcdefg123_fail-demo:case2
case2: Pulling fromtcb-1000088888888-abcd/env-abcdefg123_fail-demo
4c0d98bf9879: Pull complete
d9d36136d317: Pull complete
8cde4a21744b: Pull complete
Digest: sha256:00f4849f507bab816f9e2ff205eedb9a8f101e58be8e05e44807487955dc0988
Status: Downloaded newer image for ccr.ccs.tencentyun.com/tcb-1000088888888-abcd/env-abcdefg123_fail-demo:case2
ccr.ccs.tencentyun.com/tcb-1000088888888-abcd/env-abcdefg123_fail-demo:case2

# 3. 定位问题

  • 查看下载好的镜像
$ docker image ls
REPOSITORY                                                                         TAG                        IMAGE ID       CREATED          SIZE
ccr.ccs.tencentyun.com/tcb-1000088888888-abcd/env-abcdefg123_fail-demo       case2   ebf4bc3609b1   30 minutes ago   12.5MB
  • 拉起服务定位问题
// 注: 8888:80 - 将容器服务的80端口映射到本地8888端口
$ docker run -p 8888:80 ccr.ccs.tencentyun.com/tcb-1000088888888-abcd/env-abcdefg123_fail-demo:case2
2021/02/05 07:33:31 Server started.

  • 按正常请求本地服务(http://127.0.0.1/add?num1=1&num2=2)
  • 查看 docker run 终端标准输出日志
2021/02/05 07:34:29 Received a request.num1=1 num2=2 sum=-1
  • 通过日志发现结果不对,并通过日志文本找到对应代码 17 行打印日志。并往前查看逻辑,发现 16 行逻辑有误。
  • 修复问题,重新生成镜像推到仓库,新建云托管版本解决。

# 4. 解决问题

  • 将 16 行减法逻辑修复为加法逻辑后,本地重新打包镜像
$ docker build -t ccr.ccs.tencentyun.com/tcb-1000088888888-abcd/env-abcdefg123_fail-demo:case2-fix .
  • 拉起新的服务确认逻辑是否正常
$ docker run -p 8888:80 ccr.ccs.tencentyun.com/tcb-1000088888888-abcd/env-abcdefg123_fail-demo:case2-fix
	2021/02/05 07:33:31 Server started.
  • 按正常请求本地服务(http://127.0.0.1/add?num1=1&num2=2)
  • 查看 docker run 终端标准输出日志
2021/02/05 07:44:29 Received a request.num1=1 num2=2 sum=3
  • 将修复后的镜像推到远端
$ docker push ccr.ccs.tencentyun.com/tcb-1000088888888-abcd/env-abcdefg123_fail-demo:case2-fix
  • 云托管使用刚刚修复的镜像新建版本

  • 访问服务,验证逻辑正常

http://env-abcdefg123-1234567890.ap-shanghai.app.tcloudbase.com/container-fail-demo/add?num1=1&num2=2
1+2=3

# 附录

# 本地安装 docker

下载对应系统的Docker (opens new window)

  1. Windows Docker Desktop for Windows:下载链接 (opens new window)

  2. MacOS Docker Desktop for Mac:下载链接 (opens new window)

  3. CentOS

$ yum install -y yum-utils device-mapper-persistent-data lvm2
$ yum-config-manager --add-repo http://mirrors.tencent.com/docker-ce/linux/centos/docker-ce.repo # 设置docker源
$ yum install docker-ce    # 安装容器
$ systemctl start docker   # 启动容器

# 常见问题

# Q1. 执行 docker 相关命令错误:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

A1. 容器未启动,CentOS 可通过命令systemctl start docker启动、Window 和 MacOS 可直接打开 Docker 应用。

# Q2. 登录仓库失败:Get https://ccr.ccs.tencentyun.com/v2/: unauthorized: authentication required

A2. 本地调试指引中跳转到重置密码页面去重置密码

# 示例代码

# Case 1:使用代码构建,部署失败 - 服务无法正常拉起

查看示例代码 (opens new window)

# Case 2:使用镜像,部署失败 - 逻辑问题查日志定位

查看示例代码 (opens new window)