跳到主要内容

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 /