文档地址:
https://v2raya.org/docs/prologue/introduction/ 
 1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 docker run -d \
 --restart=always \
 --privileged \
 --network=host \
 --name v2raya \
 -e V2RAYA_LOG_FILE=/tmp/v2raya.log \
 -e V2RAYA_V2RAY_BIN=/usr/local/bin/v2ray \
 -e V2RAYA_NFTABLES_SUPPORT=off \
 -e IPTABLES_MODE=legacy \
 -v /lib/modules:/lib/modules:ro \
 -v /etc/resolv.conf:/etc/resolv.conf \
 -v /etc/v2raya:/etc/v2raya \
 mzz2017/v2raya
 
配置文件会被写入到系统的/etc/v2raya, 由于是host模式,无需手动分配端口,启动成功后,直接打开浏览器访问 你的IP:2017 首次进入后台管理需要创建管理密码。 进入管理界面后导入订阅地址即可,订阅地址一定要国内可访问,否则会出现connection reset by peer的问题。 明明文档说Docker已经包含v2ray-core,但是为何仍然提示没找到呢?我们进容器查看一下bin目录
1
 2
 root@tignioj:/home/tignioj# docker exec -it v2raya sh
 ~ # ls /usr/local/bin
 
果然是空白,猜测可能是docker镜像没有下载最新版v2raya,检查一下镜像
1
 2
 3
 REPOSITORY       TAG      IMAGE ID       CREATED         SIZE
 
 mzz2017/v2raya   latest   998cc326cf58   2 years ago     84.9MB
 
查看镜像详细信息
 1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 root@tignioj:/home/tignioj# docker inspect mzz2017/v2raya
 [
     {
         "Id": "sha256:998cc326cf586d37ce2cf24d055dbb79b799a98faa1b590123e0e7d0669ac471",
         "RepoTags": [
             "mzz2017/v2raya:latest"
         ],
         "RepoDigests": [
             "mzz2017/v2raya@sha256:890443d0b1c41b72ea69ac6fa604981fdff5c07a7c27da0a2d2b6c07bde1c3ed"
         ],
         "Parent": "",
         "Comment": "buildkit.dockerfile.v0",
         "Created": "2021-12-09T05:28:12.051263892Z",
 
竟然是2年前的镜像,果然不是最新版。我们手动下载最新版。
1
 docker pull mzz2017/v2raya:v2.2.4.6
 
删掉正在运行的容器
指定最新版本启动
 1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 docker run -d \
 --restart=always \
 --privileged \
 --network=host \
 --name v2raya \
 -e V2RAYA_LOG_FILE=/tmp/v2raya.log \
 -e V2RAYA_V2RAY_BIN=/usr/local/bin/v2ray \
 -e V2RAYA_NFTABLES_SUPPORT=off \
 -e IPTABLES_MODE=legacy \
 -v /lib/modules:/lib/modules:ro \
 -v /etc/resolv.conf:/etc/resolv.conf \
 -v /etc/v2raya:/etc/v2raya \
 mzz2017/v2raya:v2.2.4.6
 
再次进入容器查看bin目录,找到v2ray和xray了
1
 2
 3
 4
 root@tignioj:/home/tignioj# docker exec -it v2raya sh
 / # ls /usr/local/bin/
 ip6tables         ip6tables-nft     iptables-legacy   v2ray
 ip6tables-legacy  iptables          iptables-nft      xray
 
尽管clash已经删库跑路了,但是还留了个docker镜像,可惜没有文档只能盲目摸索。
准备好你的config.yaml文件 创建docker-compose.yml文件,并添加如下内容:  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 version: '3.8'
 services:
   clash:
     image: dreamacro/clash
     volumes:
       - ./config.yaml:/root/.config/clash/config.yaml
     ports:
       - "7890:7890"
       - "9090:9090"
     restart: always
 
   clash-dashboard:
     image: centralx/clash-dashboard
     container_name: clash-dashboard
     ports:
       - "9999:80"
     restart: always
 
执行docker compose -d 后台启动该项目 9090是docker的后端调用地址,公网IP必须开启9090端口,因为dashboard要访问这个服务 7890是代理地址 clash-dashboard只是查看clash配置的,所以要让dashboard连接上clash,而clash开启的9090端口提供了接口。
第一步准备的config.yaml中可以修改clash的监听地址和端口 1
 2
 3
 4
 5
 6
 mixed-port: 7890
 allow-lan: true
 mode: Rule
 log-level: info
 secret: '访问密码'
 external-controller: 0.0.0.0:9090 # clash监听地址和端口
 
输入你的ip:9999,进入clash-dashboard的网页,会提示配置clash地址和端口,密码等信息。clash地址请输入公网IP! 令人感到困扰的是,在clash-dasboard容器内部执行curl clash:9090时,clash有响应,但是在web界面却无法设置host为clash (密码肯定是正确的)
1
 2
 3
 4
 root@iZwz9f6aasa5nbfbk126doZ:~/clash# docker compose exec clash-dashboard bash
 root@10461afe8fa5:/# curl clash:9090
 {"message":"Unauthorized"}
 root@10461afe8fa5:/# 
 
设置失败!
于是尝试了下其他形式的IP,通过docker inspect 项目的网络,可以看到他们都在 192.168.48.x 同一网段下
 1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 "Containers": {
 	"10461afe8fa569cb8ddbf53ffcb36b6789155d3cbdf8356596063ed5127fd8d3": {
 		"Name": "clash-dashboard",
 		"EndpointID": "09da4c8acdc52f672d82362a35d05f79f11047b2a3edb591cf92faa46f39d025",
 		"MacAddress": "02:42:c0:a8:30:03",
 		"IPv4Address": "192.168.48.3/20",
 		"IPv6Address": ""
 	},
 	"d647ce609be8a47fe7670d82bd3b7d45895bb39ea1a38975d34e8f3f5d1184e3": {
 		"Name": "clash-clash-1",
 		"EndpointID": "a4975a9dfd13dfa7132fe84d08c5e421b48b5b8f7316f755c55612bb93bc3bfc",
 		"MacAddress": "02:42:c0:a8:30:02",
 		"IPv4Address": "192.168.48.2/20",
 		"IPv6Address": ""
 	}
 },
 
通过 ip a查看docker网关地址,可以看到是172.17.0.1
1
 2
 3
 4
 5
 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
     link/ether 02:42:24:44:77:ef brd ff:ff:ff:ff:ff:ff
     inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
        valid_lft forever preferred_lft forever
     inet6 fe80::42:24ff:fe44:77ef/64 scope link 
 
在容器内通过局域网IP和docker0网关访问都没问题
1
 2
 3
 4
 root@iZwz9f6aasa5nbfbk126doZ:~/clash# curl 192.168.48.2:9090
 {"message":"Unauthorized"}
 root@iZwz9f6aasa5nbfbk126doZ:~/clash# curl 172.17.0.1:9090
 {"message":"Unauthorized"}
 
但是在网页端仍然无法设置成功,最后发现只能设置成公网IP(需要在安全组开启端口)
使用docker compose up -d启动docker和面板 复制你的配置文件到config.yml 在config.yml中配置以下两项secret: '后端控制密码'external-controller: 0.0.0.0:9090 # 后端监听地址 进入dashboard界面,连接clash的公网IP地址。 命令行设置快捷代理,请查看->
index.zh-cn  验证代理是否开启成功 curl -I https://www.google.com 参考: