搜索

查找主题、作者或分类。

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
找到 10 条结果