shinsenter/debian-s6🌏 具备自动运行和s6-overlay功能的最新Linux Docker基础镜像。
将官方Ubuntu、Debian和Alpine Linux Docker镜像与s6-overlay和自动运行(autorun)机制相结合。此设置简化了跨各种架构构建可移植、生产就绪应用容器的过程。
Docker镜像支持Debian、Ubuntu和Alpine版本。
构建并尝试以下Dockerfile示例:
DockerfileFROM shinsenter/ubuntu-s6:latest # 在此添加你的指令 # 例如: # ADD --chown=$APP_USER:$APP_GROUP ./myproject/ /var/www/html/
DockerfileFROM shinsenter/debian-s6:latest # 在此添加你的指令 # 例如: # ADD --chown=$APP_USER:$APP_GROUP ./myproject/ /var/www/html/
DockerfileFROM shinsenter/alpine-s6:latest # 在此添加你的指令 # 例如: # ADD --chown=$APP_USER:$APP_GROUP ./myproject/ /var/www/html/
默认应用目录为/var/www/html,可通过$APP_PATH环境变量自定义:
shelldocker run -v "$PWD":/app -e APP_PATH=/app shinsenter/debian-s6:latest
此命令将Web应用目录修改为/app。
运行容器时通过设置环境变量覆盖默认用户和组设置。
可用变量:
| 环境变量 | 描述 | 默认值 |
|---|---|---|
APP_USER | 容器内用户名 | www-data |
APP_GROUP | 容器内组名 | www-data |
APP_UID | 用户的数字UID | 容器内默认UID |
APP_GID | 组的数字GID | 容器内默认GID |
例如,以用户myapp(UID为5000)运行容器:
shelldocker run -e APP_USER=myapp -e APP_UID=5000 shinsenter/debian-s6:latest
或在docker-compose.yml中:
yamlservices: web: image: shinsenter/debian-s6:latest environment: APP_USER: "myapp" APP_UID: "5000"
钩子用于自定义运行中容器的行为。
这些镜像支持以下钩子:
| 钩子名称 | 描述 | 使用示例 |
|---|---|---|
onboot | 容器启动或重启时运行 | 发送启动通知 |
first-run | 容器首次启动时运行 | 初始化数据库 |
rebooted | 容器重启时运行 | 检查崩溃日志 |
migration | 运行迁移脚本 | 执行数据库迁移 |
onready | 在migration之后、应用即将就绪时运行 | 预热缓存 |
要使用钩子,在$APP_PATH内创建hooks文件夹,并添加与钩子同名的可执行文件,或在同名子文件夹中添加文件。例如:要在first-run时安装PHP模块,添加脚本hooks/first-run或hooks/first-run/install-modules。
设置DEBUG=1可查看执行的钩子。
放置在/startup/目录中的Shell脚本会在容器启动时按文件名字母顺序自动运行。此功能可在主程序运行前初始化项目,自动执行初始化脚本以节省时间。
通过Dockerfile将名为00-migration的脚本复制到/startup/:
注意:确保脚本具有可执行权限。
DockerfileFROM shinsenter/debian-s6:latest ADD ./autorun/00-migration /startup/00-migration RUN chmod +x /startup/00-migration # 在此添加你的指令 # 例如: # ADD --chown=$APP_USER:$APP_GROUP ./myproject/ /var/www/html/
👉🏻 信息:启动目录已包含名为
99-greeting的脚本,容器启动时会打印欢迎消息。
要禁用autorun脚本,设置环境变量DISABLE_AUTORUN_SCRIPTS=1。
例如,使用docker run:
shelldocker run -e DISABLE_AUTORUN_SCRIPTS=1 shinsenter/debian-s6:latest bash
或在docker-compose.yml中:
yamlservices: web: image: shinsenter/debian-s6:latest environment: DISABLE_AUTORUN_SCRIPTS: "1"
注意:这是辅助功能。如果需要基本
crontab功能之外的高级功能,请考虑构建自己的Docker镜像并安装更适合的调度工具(如supercronic)。
要在容器中启用定时任务,可使用ENABLE_CRONTAB=1启动容器。此设置会激活Crontab服务,从$CRONTAB_DIR(默认/etc/crontab.d)加载配置。
定时任务将以$APP_USER:$APP_GROUP(默认www-data:www-data)用户身份运行,$HOME目录由$CRONTAB_HOME(默认$APP_PATH)设置。
以下是添加定时任务的Dockerfile示例:
DockerfileFROM shinsenter/debian-s6:latest ENV ENABLE_CRONTAB=1 # 通过RUN指令创建定时任务 RUN echo '* * * * * echo "每分钟运行此命令!" | tee /tmp/cron-every-minute.txt' >> /etc/crontab.d/sample1; # 或通过ADD指令复制定时任务 ADD ./sample2 /etc/crontab.d/
定时任务格式如下:
# 任务定义: # .---------------- 分钟 (0 - 59) # | .------------- 小时 (0 - 23) # | | .---------- 日 (1 - 31) # | | | .------- 月 (1 - 12) 或 jan,feb,mar,apr... # | | | | .---- 星期 (0 - 6) (周日=0或7) 或 sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * 要执行的命令
也可在docker-compose.yml中通过$CRONTAB_SETTINGS环境变量设置定时任务,容器启动时会加载这些设置,便于后续修改:
yamlservices: web: image: shinsenter/debian-s6:latest environment: ENABLE_CRONTAB: "1" CRONTAB_SETTINGS: "* * * * * echo '每分钟运行此命令!' | tee /tmp/cron-every-minute.txt"
有关定时任务的环境变量详情,见下文其他系统设置。
设置环境变量DEBUG=1启用“调试模式”以获取更详细的日志,可用于docker run或docker-compose.yml。
shelldocker run -e DEBUG=1 shinsenter/debian-s6:latest bash
yamlservices: web: image: shinsenter/debian-s6:latest environment: DEBUG: "1"
这些Docker镜像包含其他环境变量用于微调容器行为:
| 设置名称 | 默认值 | 描述 | 示例 |
|---|---|---|---|
DEFAULT_LOG_PATH | /proc/1/fd/2 | 日志输出路径,默认发送到容器标准输出 | /var/log/container.txt |
DEBUG 或 DEBUG_MODE | 未设置 | 设置为1时启用详细日志 | 1 |
TZ | UTC | 容器默认时区,详见时区列表 | Asia/Tokyo |
DISABLE_AUTORUN_SCRIPTS | 未设置 | 设置为1时禁用所有autorun脚本 | 1 |
DISABLE_AUTORUN_FIX_OWNER_GROUP | 未设置 | 设置为1时禁用应用目录所有权自动修正 | 1 |
DISABLE_GREETING | 未设置 | 设置为1时抑制启动欢迎消息 | 1 |
ENABLE_SSHD | 未设置 | 设置为1时启用容器内SSH服务器 | 1 |
SSHD_AUTHORIZED_KEYS | 未设置 | 公钥(每行一个),将添加到容器~/.ssh/authorized_keys用于认证 | ssh-rsa XXXX... |
ENABLE_CRONTAB | 未设置 | 设置为1时启用Crontab服务,从$CRONTAB_DIR(默认/etc/crontab.d)加载任务 | 1 |
ENABLE_CRONTAB_DEBUG | 未设置 | 设置为1时添加每分钟运行的调试任务,打印cron可见的环境变量 | 1 |
CRONTAB_DIR | /etc/crontab.d | 定时任务定义目录,任务以$APP_USER用户运行 | /path/for/crontab/schedules |
CRONTAB_HOME | $APP_PATH | 定时任务执行时的$HOME目录 | /path/for/crontab |
CRONTAB_MAILTO | 未设置 | 接收定时任务输出的***地址 | *** |
CRONTAB_PATH | $PATH | 定时任务的可执行文件搜索路径 | /path/for/crontab/bin |
CRONTAB_SETTINGS | 未设置 | 直接在docker-compose.yml中定义定时任务,便于管理容器内计划任务 | 0 0 * * * echo "新的一天!" |
CRONTAB_SHELL | /bin/sh | 定时任务默认shell | /bin/bash |
CRONTAB_TZ | $TZ | 定时任务时区,详见时区列表 | Asia/Tokyo |
SUPERVISOR_PHP_COMMAND | 未设置 | 用自定义PHP命令覆盖容器默认入口点以启动应用 | php -S localhost:80 index.php |
如果觉得这些镜像有用,可通过******,或在GitHub提交issue。
你的支持将帮助维护和改进这些社区镜像。
本项目采用GNU通用公共许可证v3.0授权。
请尊重创建这些镜像的智力成果。如复制或使用本项目的想法,感谢注明出处。
来自越南🇻🇳的爱心奉献。



manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务