Add pitfall notes to COPY and networking docs

This commit is contained in:
yeasy
2026-03-09 18:41:06 -07:00
parent a980e34276
commit cb6bf74a2e
2 changed files with 10 additions and 0 deletions

View File

@@ -268,3 +268,7 @@ COPY . .
``` ```
--- ---
> **🔥 踩坑实录**
>
> 某公司在优化 Node.js 应用的 Docker 镜像时发现构建出来的镜像体积超过了 2GB远远超过生产部署的需求排查发现Dockerfile 中使用了 `COPY . .` 把整个构建上下文复制进镜像导致 `node_modules/``.git/` 目录和大量测试数据全部被打包进镜像最初他们没有创建 `.dockerignore` 文件默认会复制所有文件解决方案是添加一个 `.dockerignore` 文件排除这些不必要的目录使镜像缩小到了 200MB这个教训深刻地说明了`.dockerignore` `.gitignore` 一样重要应该在项目初始化时就创建而不是等到出现问题时才想起来建议的标准做法是先复制 `package.json` `package-lock.json` 安装依赖再复制应用代码同时在 `.dockerignore` 中明确列出 `node_modules``.git`test 目录等

View File

@@ -91,3 +91,9 @@ $ docker network rm mynet
$ docker network prune $ docker network prune
``` ```
---
> **🔥 踩坑实录**
>
> 一个新手开发者通过 `docker-compose` 部署了两个容器化服务服务 A 和服务 B他在服务 A 的代码中尝试用 `localhost:3000` 访问服务 B结果始终连接超时这个错误非常隐蔽在本地单机开发时看不出问题因为他可能在同一个进程中测试排查时他错误地认为是防火墙或网络配置问题实际原因是每个容器都有独立的网络命名空间`localhost` 在容器内部只指向容器自己不是宿主机也不是其他容器正确的做法是使用 docker-compose 自动创建的服务名作为主机名`http://service-b:3000``docker-compose` 会自动在网络中注册服务名的 DNS这样容器间通信才能正确解析改动仅需一行代码问题随之消失