Docker Troubleshooting
1、 Nacos
在服务器上通过 Docker 部署 nacos springcloud 连接不上 nacos
https://github.com/alibaba/nacos/issues/6154
docker 需要映射 8848、9848、9849 三个端口。
如果需要通过 Nginx 反向代理的话,例如, 如果需要将 8848 映射到 20001 端口的话,那么还需要将 9848 映射到 21001,9849 映射到 21002 。
2、docekr compose
重启容器
1. docker compose restart
- 用于重启正在运行的容器
- 不重新创建容器
2. docker compose down && docker compose up -d
- 会停止并删除容器、网络和默认的卷
- 重新创建容器
- 通 常用于确保应用的全部配置从头开始,适合用于更新、清理环境
3. docker compose 重新创建某一容器
docker compose up -d --force-recreate <service_name>
3、只读挂载
ro
表示只读挂载
services:
myservice:
image: myimage
volumes:
- /path/on/host:/path/in/container:ro
4、清理日志
容器的日志只有在容器删除和重建时才会被清理。
Docker logs are only reset when the Docker container is deleted and recreated. Simply stopping and starting the container does not reset the logs.
Docker 日志的路径:/var/lib/docker/containers/<container-id>/<container-id>-json.log
查找所有 Docker 容器的日志,并按照大小排序。
find /var/lib/docker/containers/ -name "*json.log" | xargs du -h | sort -hr
清理单个容器的日志
truncate -s 0 /var/lib/docker/containers/xxxx/1234-json.log
清理所有容器的日志
truncate -s 0 /var/lib/docker/containers/*/*-json.log
设置容器日志的大小
sudo nano /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
sudo systemctl restart docker
上面的操作只会影响新创建的容器,对于已创建的容器,需要重新构建才会生效。
Dockerfile 文件多阶段构建
多阶段构建允许在 Dockerfile 文件中使用多个 FROM 指令(FROM ... AS builder
),每阶段独立,可以使用 COPY --from=builder
来复制上一阶段的文件。
数据清理
docker system prune -f
无需确认,强制删除以下内容
- 已停止的容器
- 未被任何容器引用的网络
- 悬空镜像(
<none>
标签的镜像) - 构建缓存(Build Cache)
ncdu 扫描大文件或目录
apt install ncdu
ncdu /