青训营开发过程遇到的问题及解决方法(二) | 青训营笔记

145 阅读4分钟

这是我参与「第五届青训营」伴学笔记创作活动的第15天。

本文记录在青训营大项目开发的过程中遇到了许多问题和BUG,方便以后自己查阅以及其他网友参考。问题每隔几天堆起来汇总成一篇文章,将以流水账的方式呈现。第二篇记录一下docker用到的命令,问题,和几个bug。

一 docker命令

镜像相关

  • docker command --help:深入了解指定的 Docker 命令使用方法。
  • docker images: 查看镜像列表
  • docker search xxx:搜索镜像
  • docker pull 镜像名:拉取镜像
  • docker pull 镜像名:Tag:拉取指定版本号镜像
  • docker rmi -f 镜像名/镜像ID: 删除镜像
  • docker save 镜像名/镜像ID -o 镜像名.tar:将镜像保存为tar文件,方便换机器
  • docker load -i 镜像名:加载镜像文件,使其恢复为一个镜像
  • docker tag 源镜像名:TAG 想要生成新的镜像名:新的TAG :添加镜像标签, 如果省略TAG 则会为镜像默认打上latest TAG

容器相关

  • docker ps: 查看运行容器
  • docker ps -a:查看所有容器
  • docker run -it 镜像名:Tag /bin/bash :启动容器
  • -it 表示 与容器进行交互式启动
  • -d 表示可后台运行容器 (守护式运行)  
  • --name 给要运行的容器 起的名字  
  • /bin/bash  交互路径
  • -p 主机端口:容器端口。将容器的端口映射到宿主机上,通过宿主机访问内部端口。
  • -v 主机目录:容器目录。 将容器内的指定文件夹挂载到宿主机对应位置,这样容器删了也不会清除该目录下文件(持久化),除非down的时候加-v。

  • docker restart 容器ID/容器名:重启容器
  • docker start 容器ID/容器名:启动容器
  • docker kill 容器ID/容器名:沙雕容器
  • docker stop 容器名/容器ID:停止容器(不清除)

  • docker rm -f 容器名/容器ID:删除一个容器
  • docker rm -f 容器名/容器ID 容器名/容器ID …… :删除多个容器 空格隔开要删除的容器名或容器ID
  • docker rm -f $(docker ps -aq):删除全部容器
  • docker attach 容器ID/容器名: 进入容器
  • docker exec -it 容器名/容器ID /bin/bash :进入容器(推荐)
  • docker cp 容器ID/名称: 容器内路径 容器外路径: 从容器内 拷出
  • docker cp 容器外路径 容器ID/名称: 容器内路径 :从外部 拷贝文件到容器内
  • docker logs -f --tail=要查看最新多少行 容器ID/容器名:查看日志

  • du -hs /var/lib/docker/ :查看docker磁盘占用总体情况

  • docker system df :查看Docker的磁盘使用具体情况

二 docker遇到的问题

docker: Error response from daemon: Conflict. The container name “fabricxxx” is already in use by container “fabricxxx”. You have to remove (or rename) that container to be able to reuse that name.

  • 原因:docker 容器重名
  • 解决方式:改名容器或者删除重建容器

Failed to start docker.service: Unit is not loaded properly: Invalid argument.

  • 原因:docker服务无法正常加载
  • 解决方式:卸载docker, 删除docker.service,重新安装docker
  • docker restart XXXXXXX Error response from daemon: Cannot restart container XXXXXXX: container “XXXXXXXXXXXXXXXX”: already exists
  • 原因:旧容器未安全退出
  • 解决方式:docker ps -a看一下这个容器,然后docker stop/down 这个容器,再重新启动容器
  • Docker no space left on device
  • 原因:空间不足
  • 解决方式:用docker system prune -a 清理空间,删除未被使用的容器,镜像等资源
  • /var/lib/docker/containers 占用过大
  • 原因:日志文件占用过大
  • 解决方式:1、cat /dev/null > *-json.log
  • 2、增加dockerd启动参数限制日志大小,在文件/etc/docker/daemon.json加入下面这句
  • {“log-driver”:“json-file”,“log-opts”: {“max-size”:“2G”, “max-file”:“10”}}
  • Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout 连接超时的问题。
  • 解决方式:在/etc/docker/daemon.json文件(没有则创建)增加以下内容
  • {
  • "registry-mirrors": ["a6lh9qh3.mirror.aliyuncs.com"]
  • }
  • 然后重启docker:
  • sudo systemctl daemon-reload
  • sudo systemctl restart docker

三 遇到的BUG

1、gin框架bind\shouldbind获取参数为空、绑定不到参数

1676301007964.png

  • 如图,想把username和password解析绑定,但是没成功,调试发现username和password为空。但是c.query(username、password)可以。
  • 原因:需要在username、password字段打上tag。如图所示,需要添加uri(url参数)\form(表单参数)的tag image.png