s6-overlay 快速上手
最近用到 s6-overlay 记录一下踩到的坑
定位
容器中的 supervisor
https://github.com/just-containers/s6-overlay
上手
以 alpine 为例
1 | FROM alpine |
官方推荐用新格式启服务,即使用 s6-rc.d 目录
默认安装 s6 后,会自带 user, user2 目录
user 目录的 type 为 bundle
用法为,在 s6-rc.d 下新建服务定义目录,然后在 user/contents.d 下 touch 一下同名空文件
1 | 0 B ┌─ redis-server |
redis-server/type 为 longrun
redis-server/run 为
1 |
|
- 官方文档中都是
#!/command/execlineb -P
,但没办法,alpine 中没有把 execlineb 放在 /command 下 - s6-setuidgid 让 redis-server 以 redis 的用户跑
- 显示指定 conf 文件,主要为了确保 dump.rdb 的生成目录对 redis 用户可写,默认 /var/lib/redis
可能遇到的问题
- dockerfile COPY 一行报错,找不到文件
想想有没有 .dockerignore
- cd 或 composer 报找不到 HOME 的定义
s6-overlay 默认会接手环境变量,可以使用 with-contenv
使单个命令继承原 env,with-contenv env
或指定 S6_KEEP_ENV=1 (default = 0),方便开发环境