可观测学堂

可观测问答

聚焦概念、架构、排障、价格与选型,一篇解决一个明确问题。

docker-compose 中 ports 和 expose 有什么区别? cover
概念指南

docker-compose 中 ports 和 expose 有什么区别?

ports 把容器端口发布到宿主机,可达性取决于绑定地址和网络策略;expose 仅声明端口,不控制访问。同网络服务通信不要求 expose。

Docker 镜像(Image)和容器(Container)有什么区别? cover
概念指南

Docker 镜像(Image)和容器(Container)有什么区别?

镜像是只读的应用打包模板(代码+依赖+配置),容器是从镜像创建的实例,可运行也可停止(带可写层与生命周期状态)。一个镜像可启动多个容器,容器依赖镜像而存在。本文用类比讲清二者关系。

Dockerfile 中 RUN 和 CMD 有什么区别? cover
概念指南

Dockerfile 中 RUN 和 CMD 有什么区别?

RUN 在构建镜像时执行(装包、建目录,结果固化进镜像层),CMD 指定容器启动时的默认命令(可被 docker run 覆盖)。构建期用 RUN,运行期用 CMD。

Dockerfile 中 COPY 和 ADD 命令有什么区别? cover
概念指南

Dockerfile 中 COPY 和 ADD 命令有什么区别?

COPY 可从构建上下文、阶段或镜像等来源复制;ADD 还支持远程 URL/Git 与本地 tar 解包。普通复制用 COPY,需要 ADD 能力时核对其语义及版本。

Windows 上 Docker 报 /var/run/docker.sock 权限拒绝怎么办? cover
概念指南

Windows 上 Docker 报 /var/run/docker.sock 权限拒绝怎么办?

/var/run/docker.sock 是 Linux 环境的 Unix socket;应先核对 Docker context 和容器模式,Windows 容器通常用命名管道 npipe 或受保护的 Remote API;Dock…

如何编辑正在运行的 Docker 容器内的文件? cover
概念指南

如何编辑正在运行的 Docker 容器内的文件?

docker exec -it 容器名 /bin/bash 进容器后用编辑器修改(容器常无编辑器,可先 apt install 或用 sed 改);不折腾的做法是 docker cp 拷出来改完再拷回去。注意改动不持久。

如何查看(探索)Docker 容器的文件系统? cover
概念指南

如何查看(探索)Docker 容器的文件系统?

运行中的容器用 docker exec -it 容器名 /bin/sh 进去看;用 docker export 导出文件系统(不含卷,运行中不保证一致快照);容器已停止用 docker cp 或 commit 成镜像再看。本文汇总各方法。

如何解决 Docker 的 permission denied 权限问题? cover
概念指南

如何解决 Docker 的 permission denied 权限问题?

非 root 用户访问本机 rootful Docker socket 报权限拒绝时,原因可能是不在其授权用户组,需先查实际端点与权限:sudo groupadd docker、sudo usermod -aG docker $USER,重新登录后免 sudo。本文给出完整步骤与安全提醒。

如何强制 Docker 不用缓存、完全重新构建镜像? cover
概念指南

如何强制 Docker 不用缓存、完全重新构建镜像?

docker build --no-cache 跳过全部层缓存从零构建;只想让某一步之后的缓存失效,可用 --build-arg 注入变化值或 docker compose build --no-cache。本文给出各场景做法。

如何从宿主机获取 Docker 容器的 IP 地址? cover
概念指南

如何从宿主机获取 Docker 容器的 IP 地址?

docker inspect -f '{{range $name, $net := .NetworkSettings.Networks}}{{$name}} IPv4={{$net.IPAddress}} IPv6={{$net.GlobalIPv6Address}}{{println}}{{end}}' 容器名 即可拿到容器 IP;地址取决于网络驱动和 IPAM,host/none 模式没有独立桥接 IP。

Dockerfile 里怎么写注释? cover
概念指南

Dockerfile 里怎么写注释?

Dockerfile 用 # 开头写注释,独占一行,不支持行尾注释;指令参数里的 # 不算注释。另可用 parser directive 指定语法版本。本文说明规则与常见坑。

如何在 cron 任务中访问 Docker 容器的环境变量? cover
概念指南

如何在 cron 任务中访问 Docker 容器的环境变量?

cron 守护进程不读取容器启动时的环境变量,常见解法:启动脚本把 env 导出到文件(env > /etc/environment)让 cron 源它,或用 docker run -e 显式传入。本文给出可靠做法。