Skip to content

Commit 9464e9d

Browse files
committed
docs(tuic): align Docker page with actual image
Document the Distroless base, WORKDIR, and tag publishing rules; fix the --init command to write into the mounted directory; add data_dir and ACME persistence guidance.
1 parent 562ff9e commit 9464e9d

1 file changed

Lines changed: 17 additions & 6 deletions

File tree

‎tuic/docs/docker.md‎

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,21 @@ docker pull ghcr.io/itsusinn/tuic-server:latest
1717
```
1818

1919
- 同时提供 `linux/amd64` 与 `linux/arm64` 两种架构。
20-
- `latest` 指向最近一次发布;也可以使用对应的版本标签(例如 `ghcr.io/itsusinn/tuic-server:1.2.3`)。
21-
- 镜像入口为 `tuic-server`,默认命令为 `-d /etc/tuic`,因此会读取挂载到 `/etc/tuic` 的配置目录。
22-
- 容器内设置了 `IN_DOCKER=true`。
20+
- `latest` 指向最近一次发布;也可以使用对应的版本标签(例如 `ghcr.io/itsusinn/tuic-server:1.2.3`)。镜像仅在推送 `v*` 版本标签时发布,普通分支或 PR 构建不会推送。
21+
- 镜像入口为 `/usr/bin/tuic-server`,默认命令为 `-d /etc/tuic`,因此会读取挂载到 `/etc/tuic` 的配置目录。
22+
- 容器的工作目录为 `/var/lib/tuic`,并设置了 `IN_DOCKER=true`;后者让服务器在未显式指定格式时按配置文件内容推断格式,而不只依赖扩展名。
23+
- 最终阶段基于 `gcr.io/distroless/cc`:包含 glibc 运行时与 CA 证书(可用于 ACME 申请),但不含 shell、包管理器及 `curl`/`wget` 等工具,因此无法 `docker exec` 进入容器调试。
2324

2425
## 准备配置
2526

26-
容器不包含配置文件,需要先在宿主机上生成。可以借助一次性容器调用 `--init`:
27+
容器不包含配置文件,需要先在宿主机上生成。可以借助一次性容器调用 `--init`;该命令会把 `config.toml` 写入进程的当前工作目录,因此必须用 `-w` 指定到挂载目录:
2728

2829
```console
2930
mkdir -p /etc/tuic
30-
docker run --rm -v /etc/tuic:/etc/tuic ghcr.io/itsusinn/tuic-server --init
31+
docker run --rm -w /etc/tuic -v /etc/tuic:/etc/tuic ghcr.io/itsusinn/tuic-server --init
3132
```
3233

33-
该命令会在 `/etc/tuic` 中生成一个包含 5 个随机用户的 `config.toml`;若文件已存在则不会覆盖。你也可以从[快速入门](getting-started.md)中的最小配置开始,或使用[配置生成器](/config-generator/)在浏览器本地生成成对的服务器与客户端配置。
34+
该命令会在 `/etc/tuic` 中生成一个包含 5 个随机用户的 `config.toml`;若当前目录已存在 `config.toml`,命令会报错退出,不会覆盖已有文件。你也可以从[快速入门](getting-started.md)中的最小配置开始,或使用[配置生成器](/config-generator/)在浏览器本地生成成对的服务器与客户端配置。
3435

3536
请确认 `config.toml` 中的 `server` 监听地址允许来自容器的连接,例如 `[::]:8443`。
3637

@@ -51,6 +52,8 @@ docker run -d \
5152
- `-v /etc/tuic:/etc/tuic:ro` 以只读方式挂载配置目录,与默认命令 `-d /etc/tuic` 对应。
5253
- 如需使用不同的目录,请覆盖命令,例如 `ghcr.io/itsusinn/tuic-server -d /config`。
5354

55+
容器的工作目录是 `/var/lib/tuic`。配置中的 `data_dir` 默认为空,会解析为该工作目录;TLS 证书与私钥的**相对路径**也基于 `data_dir` 解析,而不是配置文件所在目录。因此配置里应使用**绝对路径**,或显式设置 `data_dir`,否则相对路径会指向容器内临时的 `/var/lib/tuic`。
56+
5457
### Docker Compose
5558

5659
```yaml
@@ -67,6 +70,12 @@ services:
6770
6871
若服务器使用 ACME 自动申请证书,HTTP-01 验证还需要开放 **TCP 端口 80**。此时可在 `ports` 中追加 `"80:80/tcp"`,或改用 `network_mode: host` 让容器直接使用宿主机网络。
6972

73+
ACME 证书会写入 `data_dir`。默认情况下 `data_dir` 为空并解析为 `/var/lib/tuic`,属于容器可写层,容器重建后会丢失并触发重新申请。如需持久化,请把 `data_dir` 指向挂载目录(例如 `/etc/tuic`)并使用**可写**挂载,此时不要加 `:ro`:
74+
75+
```toml
76+
data_dir = "/etc/tuic"
77+
```
78+
7079
## 验证
7180

7281
```console
@@ -80,5 +89,7 @@ docker logs tuic-server
8089
- **客户端无法连接**:确认 UDP 端口已放行、端口映射包含 `/udp`,以及云服务商的安全组允许 UDP。
8190
- **TLS 验证失败**:确认客户端 `tls.sni` 与证书域名一致;自签名证书仅在测试时使用 `skip_cert_verify = true`。
8291
- **ACME 申请失败**:确认 `80/tcp` 可达,且域名已正确解析到服务器。
92+
- **无法进入容器排查**:镜像基于 Distroless,不含 shell,`docker exec ... sh` 不可用;请使用 `docker logs` 查看日志,并通过挂载的配置目录定位问题。
93+
- **提示证书或数据文件不存在**:相对路径基于 `data_dir`(默认容器工作目录 `/var/lib/tuic`)解析,而非配置文件所在目录;请改用绝对路径或设置 `data_dir`。
8394

8495
通过配置验证仅表示字段有效;并不意味着 DNS、证书、防火墙或实际网络连接已通过验证。

0 commit comments

Comments
 (0)