可观测学堂

可观测问答

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

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

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

ports 把容器端口发布到宿主机(外部可访问),expose 仅在 compose 内部网络向其他服务开放端口(不对外)。内部依赖用 expose,对外服务用 ports。

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 下载和 tar 自动解压,但行为不透明。官方最佳实践:默认用 COPY,确需自动解压才用 ADD,下载文件用 RUN+curl 替代。

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

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

/var/run/docker.sock 是 Linux 的 Unix socket,Windows 上不存在;Windows 容器需用命名管道 npipe 或 Docker Remote API;Docker Desktop 里跑…

如何编辑正在运行的 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 用户跑 Docker 报权限拒绝,是因为不在 docker 用户组: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.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名 即可拿到容器 IP;容器在哪个网络就有哪个网段的 IP。

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

Dockerfile 里怎么写注释?

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

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

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

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