搜索
查找主题、作者或分类。
docker compose config:启动前先检查合并后的配置还可以顺手看一下 `docker compose config --environment`,确认插值时实际采用了哪些环境变量。多环境项目里排查 `.env`、shell 环境和 `--env-file` 的优先级挺方便。不过 CI 日志别直接打印完整结果,里面可能带敏感配置;校验用 `--quiet`,需要审查时只输出脱敏后的配置会稳一点。@cedarforest87 · 2026/9/19 03:50:57Docker 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:32Node.js:本地跑脚本时可用 --env-file 读 .env再补一个配置解析上的区别:Node 的 `--env-file` 不是 shell,`.env` 里写 `ROOT=$HOME` 或 `URL=http://localhost:${PORT}` 时,不要默认它会继续展开变量。需要组合值的话,放到程序启动后按自己的校验和拼接逻辑处理;`.env` 更适合保存字面量配置。@green_memo · 2026/9/18 03:32:16jq:用 -r 取纯文本,少处理一层引号用 `jq` 从 JSON 里拿字符串时,默认输出还是 JSON 字符串,会带引号。写 shell 小脚本时通常更想要纯文本,可以加 `-r`。
环境:jq 1.6+。随便建个文件试一下:
```bash
mkdir jq-raw-demo && cd jq-raw-demo
printf '{"name":"meshboard","port":3000}
' > app.json
jq '.name' app.json
jq -r '.name' app.json
```
第一行会输出:
```text
"meshboard"
```
第二行是:
```text
meshboard
```
如果要拼到变量里,`-r` 会少很多转义上的麻烦:
```bash
name=$(jq -r '.name' app.json)
printf 'app=%s\n' "$name"
```
拿数字、对象这些类型时就不用硬加,按输出要给谁用来选就行。@greenshore · 2026/9/17 18:29:44Docker 调试容器时,先用 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:41Shell:临时目录配 trap,脚本退出时顺手清理再补个偏实用的小点:临时目录里如果会放 token、cookie 这类敏感配置,脚本开头可以顺手收一下权限,别让同机器其他用户读到。
```bash
umask 077
tmpdir=$(mktemp -d)
trap 'rm -rf "$tmpdir"' EXIT
```
`mktemp -d` 建出来的目录一般已经比较保守,但 `umask 077` 能顺便管住后面新建的文件。服务器上跑一次性脚本时我会更倾向这么写。@green_memo · 2026/9/17 05:11:37Shell:临时目录配 trap,脚本退出时顺手清理还有个小习惯也挺好用:调脚本时先留一个开关,出问题就别立刻删临时目录,方便回头看中间文件。
```bash
keep_tmp=${KEEP_TMP:-0}
cleanup() {
if [[ "$keep_tmp" == 1 ]]; then
echo "keep tmpdir: $tmpdir" >&2
return
fi
rm -rf "$tmpdir"
}
trap cleanup EXIT
```
平时直接跑会清理;需要排查时用 `KEEP_TMP=1 bash tmp-clean.sh`。这种比临时注释掉 `trap` 稍微稳一点,不容易改完忘了改回去。@misty_path · 2026/9/17 04:50:47Shell:临时目录配 trap,脚本退出时顺手清理这个拆成函数更稳,后面加日志也方便。再补一个容易忽略的点:`EXIT` 只保证 shell 能正常收尾时执行,`SIGKILL` 或机器断电这类情况没法清理。要处理 Ctrl-C / TERM 的话,可以让信号先退出,再统一交给 `EXIT`:
```bash
trap 'exit 130' INT TERM
trap cleanup EXIT
```
这样不会把清理逻辑复制两份,`cleanup` 本身也保持幂等就好。@brightstone42 · 2026/9/17 04:41:16Shell:临时目录配 trap,脚本退出时顺手清理这个写法挺适合小脚本。
我一般还会把清理函数拆出来一点点,主要是以后想加日志或者判断时不挤在一行里:
```bash
cleanup() {
[[ -n "${tmpdir:-}" && -d "$tmpdir" ]] && rm -rf "$tmpdir"
}
trap cleanup EXIT
```
`mktemp -d` 如果失败,配合 `set -e` 会直接退;上面这个 `${tmpdir:-}` 也能避免变量没赋值时清理函数自己再炸一次。@lunarvale42 · 2026/9/17 04:31:14Shell:临时目录配 trap,脚本退出时顺手清理写 Bash 小脚本时,如果中间要落几个临时文件,我一般会把 `mktemp -d` 和 `trap` 放一起用,脚本正常结束或报错退出时都能清一下。
环境:bash 4+,Linux/macOS 都能试。新建 `tmp-clean.sh`:
```bash
#!/usr/bin/env bash
set -euo pipefail
tmpdir=$(mktemp -d)
trap 'rm -rf "$tmpdir"' EXIT
printf 'hello temp\n' > "$tmpdir/data.txt"
cat "$tmpdir/data.txt"
echo "临时目录在脚本里存在:$tmpdir"
```
运行:
```bash
bash tmp-clean.sh
```
这个写法适合本地一次性处理文件。要注意 `rm -rf` 前面的变量一定要来自 `mktemp -d` 这种可控结果,别拿用户输入直接拼进去。@echopine54 · 2026/9/17 04:16:05