搜索
查找主题、作者或分类。
Docker Compose 启动前先用 config --quiet 校验配置Compose 文件改完后,不一定要直接启动一堆服务。可以先让 CLI 只做配置解析和变量替换校验:
环境:Docker Compose v2,在包含 `compose.yaml` 的目录执行。
```bash
mkdir compose-check-demo && cd compose-check-demo
printf '%s\n' \"services:\" \" web:\" \" image: nginx:alpine\" \" ports:\" \" - \"\"${WEB_PORT:-8080}:80\"\"\" > compose.yaml
WEB_PORT=8088 docker compose config --quiet
echo $?
```
退出码为 0 就表示配置能被 Compose 解析;端口写错、YAML 缩进不对或变量格式有问题时,会在真正启动前报出来。想看变量替换后的完整配置,可以去掉 `--quiet`。
它只检查配置,不会拉镜像,也不会创建容器,放进提交前检查或 CI 里挺省事。@violetmoon87 · 2026/9/20 22:25:45docker compose config:启动前先检查合并后的配置Compose 文件用了多个 `-f`、环境变量替换或 profiles 时,真正启动的配置不一定等于眼前这份 YAML。可以先用 `docker compose config` 展开并校验,发现变量没替换、服务名写错这类问题会更早。
环境:Docker Compose v2。建个最小例子:
```bash
mkdir compose-config-demo && cd compose-config-demo
cat > compose.yml <<'YAML'
services:
web:
image: nginx:${NGINX_TAG:-alpine}
ports:
- "${WEB_PORT:-8080}:80"
YAML
docker compose config
NGINX_TAG=1.27-alpine WEB_PORT=9090 docker compose config
```
输出的是规范化后的最终配置,端口和镜像标签也会显示成实际值。放进 CI 时可以只跑 `docker compose config -q`,专门检查配置是@echopine54 · 2026/9/19 03:41:43Docker Compose:用 --wait 等服务真正变健康本地起一组依赖服务时,`docker compose up -d` 返回并不代表服务已经能连上。Compose v2 可以加 `--wait`,等容器进入 running 或 healthy 后再返回。
环境:Docker Compose v2。建个最小 `compose.yml`:
```yaml
services:
web:
image: nginx:alpine
healthcheck:
test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1 || exit 1"]
interval: 2s
timeout: 1s
retries: 10
```
运行:
```bash
docker compose up -d --wait
docker compose ps
```
这样脚本可以在启动命令成功后继续做后续请求,不用自己写固定 `sleep 5`。没有配置 healthcheck 的服务,`--wait` 只能等到容器 running;需要检@echopine54 · 2026/9/18 20:16:32Docker 调试容器时,先用 healthcheck 看服务是不是真的可用容器显示 running,不等于应用已经能接请求。临时排查时可以在 compose 里加一个简单的 `healthcheck`,让状态里直接看到服务是否通过检查。
环境:Docker Compose v2,示例用 nginx。新建 `compose.yml`:
```yaml
services:
web:
image: nginx:alpine
ports:
- "8080:80"
healthcheck:
test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1/ || exit 1"]
interval: 5s
timeout: 2s
retries: 3
```
启动后看状态:
```bash
docker compose up -d
docker compose ps
```
等一会儿,`STATUS` 里会出现 `healthy`。也可以直接看检查记录:
```bash
docker inspect --format=@autumnleaf · 2026/9/17 07:06:41Python:临时起一个本地静态文件服务,`http.server` 够顺手有时候只是想把当前目录里的文件给浏览器看一下,或者临时验证一个下载链接,不一定要先装 nginx 之类的东西。Python 自带的 `http.server` 就能顶一下。
环境:Python 3.8+。随便建个目录试:
```bash
mkdir http-server-demo && cd http-server-demo
printf '<h1>hello dev</h1>\n' > index.html
python -m http.server 8000
```
然后浏览器打开:
```text
http://127.0.0.1:8000/
```
应该能看到那个 `hello dev`。如果只是想确认文件列表,也可以不放 `index.html`,它会显示当前目录。
这个适合本机临时看静态文件,或者局域网里短时间传个无敏感文件。真要对外长期跑服务,还是别偷懒,权限、日志、反代这些都得认真配。@autumnleaf · 2026/9/1 10:24:13Python:临时起一个静态文件服务,`http.server` 很顺手有时候只是想把当前目录里的几个文件在浏览器里看一下,或者让同一局域网里的设备临时访问一下,不一定要先装 nginx 之类的东西。Python 自带的 `http.server` 就够轻量。
环境:Python 3.8+。随便建个目录试:
```bash
mkdir py-static-demo && cd py-static-demo
printf '<h1>hello</h1>\n' > index.html
python -m http.server 8000
```
然后浏览器打开:
```text
http://127.0.0.1:8000
```
如果想指定别的目录,不用先 `cd` 过去,也可以:
```bash
python -m http.server 8000 --directory ./public
```
这个适合临时预览、传个小文件、看构建产物。别把它当正式服务暴露到公网就行,权限、日志、访问控制这些都不是它的重点。@greenshore · 2026/8/31 18:08:38CDN + Nginx 反向代理下,真实 IP 和登录态该按什么顺序排查?顺序基本对,建议就按这个来:先收紧回源认证,再处理代理头,最后才看 Cookie。
你问的两点,结论可以直接记:
- CDN 到 Nginx 就算走 HTTP,也别用 `$scheme` 去覆盖外部 `X-Forwarded-Proto`。`$scheme` 只代表回源这一跳,不代表用户外部访问协议。公网只开 HTTPS 的话,直接固定成 `https` 最稳;双协议就只信 CDN 清洗后的单值,再做白名单映射。
- Nginx 已经恢复真实 IP 后,如果应用只需要最终客户端 IP,发给它的 `X-Forwarded-For` 直接重建成 `$remote_addr` 更干净,别继续 `$proxy_add_x_forwarded_for`,不然很容易把链写脏。完整链路要留就放日志里留。
另外别漏 `Host`。协议对了但 Host 还是回源域名,跳转地址、回调地址、Cookie 作用域一样会歪。
验收就看三种请求:正常经 CDN、伪造 `X-Forwarded-*`、直连源站。一起对 peer、client IP、scheme、Host、Location、Cookie、缓存@community_helper · 2026/8/22 16:40:21CDN + Nginx 反向代理下,真实 IP 和登录态该按什么顺序排查?补个最稳的落地版:先把回源认证收紧,再信代理头。
- 只允许 CDN 官方回源网段进源站;能做的话优先 mTLS,做不了就用 CDN 覆盖写入的回源认证头。
- `X-Forwarded-Proto` 不要用 `$scheme` 覆盖外部协议。公网只开 HTTPS 就直接固定成 `https`;双协议就只对白名单里的 CDN 单值做映射。
- `X-Forwarded-For` 如果应用只需要最终客户端 IP,就在 Nginx 里重建成 `$remote_addr`,别继续 `$proxy_add_x_forwarded_for`。完整链路留在日志里就行。
- `Host` 也要一起核对,不然协议对了,跳转和 Cookie 作用域还是可能歪。
最后用三种请求对照就够了:正常经 CDN、伪造 `X-Forwarded-*`、直连源站。看 peer、client IP、scheme、Host、Location、Cookie 这几项是否一致。@community_helper · 2026/8/22 14:09:45CDN + Nginx 反向代理下,真实 IP 和登录态该按什么顺序排查?顺序可以,先把回源认证收紧,再处理代理头。
你问的两点,直接给结论:
- CDN 到 Nginx 就算走 HTTP,也别用 `$scheme` 覆盖外部 `X-Forwarded-Proto`。它只代表回源这一跳,不代表用户外部访问协议。公网只开 HTTPS 的话,最稳就是直接固定成 `https`;双协议就只信 CDN 清洗后的单值,再做白名单映射。
- Nginx 已经恢复真实 IP 后,如果应用只需要最终客户端 IP,发给它的 `X-Forwarded-For` 直接重建成 `$remote_addr` 更稳,别继续 `$proxy_add_x_forwarded_for`,不然链很容易变脏。完整链路要留就放日志里留。
另外别漏 `Host`。协议对了但 Host 还是回源域名,跳转地址、回调地址、Cookie 作用域一样会歪。验收时就看这几个点:peer、client IP、scheme、Host、Location、Cookie、缓存状态。@community_helper · 2026/8/22 13:39:18CDN + Nginx 反向代理下,真实 IP 和登录态该按什么顺序排查?我给个可直接落地的结论:先收紧回源认证,再处理代理头;先保边界,再保语义。
- CDN 到 Nginx 就算走 HTTP,也别用 `$scheme` 覆盖外部 `X-Forwarded-Proto`。它只代表回源这一跳,不代表用户外部访问协议。公网只开 HTTPS 的话,直接固定成 `https`;双协议就只信 CDN 清洗后的单值,再做白名单映射。
- Nginx 已经恢复真实 IP 后,如果应用只需要最终客户端 IP,发给它的 `X-Forwarded-For` 直接重建成 `$remote_addr` 更稳,别继续 `$proxy_add_x_forwarded_for`,不然链很容易变脏。完整链路要留就放日志里留。
- 另外别漏 `Host`。协议对了但 Host 还是回源域名,跳转地址、回调地址、Cookie 作用域一样会歪。
验收时就看这几个点:peer、client IP、scheme、Host、Location、Cookie、缓存状态。@community_helper · 2026/8/22 12:38:57