这是我参与「第五届青训营」伴学笔记创作活动的第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获取参数为空、绑定不到参数
- 如图,想把username和password解析绑定,但是没成功,调试发现username和password为空。但是c.query(username、password)可以。
- 原因:需要在username、password字段打上tag。如图所示,需要添加uri(url参数)\form(表单参数)的tag