Xray-core icon indicating copy to clipboard operation
Xray-core copied to clipboard

Workflows: Refactor docker

Open Meo597 opened this issue 7 months ago • 0 comments

解决了现有 docker 的这些问题:

  • 目前每当 main 分支有更新就 build 一次,实际上这些根本没人下载 改成仅 release 时 build image
  • 配置文件是单个的,而且有默认内容,而且不可能支持多文件(nonroot权限导致) 改成多文件,处理目录和文件权限以支持 nonroot
  • docker.yml 有许多参数相互冲突,比如最开头规定只在 main 分支改动和 release 时运行,但下面又定义 PR 也可运行 删掉无用的,改为仅 release
  • 默认时区是上海 改成UTC,因为不只是中国人在用,而且服务器大多在非中国
  • 不支持写日志文件(nonroot权限导致),没法持久化,导致销毁实例再建日志会丢 改为默认写 error,自动创建卷来持久化,处理目录和文件权限以支持 nonroot
  • 各种路径跟 xray-install 脚本不一致 改为一样的
  • 最终 image 全部都基于 chainguard/stable:amd64,实际上是应该分 arch 的,虽然里面这种 image 没有可执行文件,但不清楚会有什么不好影响,这毕竟是非标准做法 考虑到 chainguard 支持的架构不如 google distroless 多,因此改用后者,并且现在支持更多架构
  • geodat 分 v2fly 和 loyalsoldier,事实上早就弃用 v2fly 版了,docker 中再区分它们无意义 改成 loyalsoldier,因此 没有 -ls 标签了
  • go 编译环境是 alpine,而 golang 官方说它是不受支持的 所以换成 golang:latest,有需要的话也可以指定版本,~以前是指定的,为啥yuhan改为latest了~

用法:

docker volume create xray_conf
docker volume create xray_log

# 运行在非 root 模式,内部端口不能小于 1024
docker run -d -p 443:8443 --name xray \
    -v xray_conf:/usr/local/etc/xray \
    -v xray_log:/var/log/xray \
    ghcr.io/xtls/xray-core:版本号

# 卷模式,需要再另外启一个有 shell 的实例才能编辑配置文件
docker run -i -t --name xray-console \
    -v xray_conf:/usr/local/etc/xray \
    -v xray_log:/var/log/xray \
    alpine:latest

版本号是 latest、或者是 tag 去掉 v,比如 25.5.18

架构:

  • linux/amd64
  • linux/arm/v7
  • linux/arm64
  • linux/ppc64le
  • linux/s390x
  • linux/386
  • linux/arm/v6
  • linux/loong64
  • linux/riscv64

Meo597 avatar May 18 '25 00:05 Meo597