# Docker 部署 V2Ray

Docker 技术是一种新的虚拟化技术,和传统的虚拟化技术不同。V2Ray 同样提供 Docker 部署方式,并且通过 Docker 来部署 V2Ray 会非常轻松高效。

Docker 只能部署在 KVM 或者 XEN 架构的 VPS 中

首先安装 Docker:

$ sudo apt-get install -y docker

安装完 Docker 后我们从 DockerHub (opens new window) 通过搜索找到 V2Ray 官方提供的镜像 (opens new window)。找到拉取镜像的命令并复制下来,在网页右侧我们可以看到命令为 docker pull v2fly/v2fly-core,我们将其复制下来回到命令行中粘贴并执行:

$ sudo docker pull v2fly/v2fly-core

待 V2Ray 的 Docker 镜像拉取完成后就可以进入下一个部署阶段。在此之前,你需要在 /etc 目录下新建一个文件夹 v2ray(也可以在其他路径,Docker 有读写权限即可),并把你的配置写好后命名为 config.json 放入 v2ray 文件夹内。配置文件可以参考这里的模板 (opens new window)。待配置文件准备就绪后键入以下命令进行部署。部署前请记下配置文件中你所设置的端口号,在部署时需要将其映射到宿主机上,否则将无法访问。此处假设设定的端口号为 8888,需要映射到宿主机的 8888 端口上。TZ 变量根据你所在的时区设置。如果你的 config.json 不在 /etc/v2ray 下,则把 -v /etc/v2ray:/etc/v2ray 第一个路径改成你的 config.json 所在目录。完整命令为:

$ sudo docker run -d --name v2ray -e TZ=Asia/Shanghai -v /etc/v2ray:/etc/v2ray -p 8888:8888 --restart always v2fly/v2fly-core run -c /etc/v2ray/config.json

键入以上命令后,命令行会出现一串字符,代表容器部署成功,可以立即通过客户端连接并开始使用了。如果还不放心,键入以下命令来查看容器的运行状态:

$ sudo docker container ls

如果看到输出的结果中 STATUSUP 字样则代表容器正在运行:

$ docker container ls
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                     NAMES
2a7sdo87kdf3        v2fly/v2fly-core      "/usr/bin/v2ray run …"   3 minutes ago       Up 3 minutes        0.0.0.0:8888->8888/tcp    v2ray

通过以下命令来启动 V2Ray:

$ sudo docker container start v2ray

停止 V2Ray:

$ sudo docker container stop v2ray

重启 V2Ray:

$ sudo docker container restart v2ray

查看日志:

$ sudo docker container logs v2ray

更新配置后,需要重新部署容器,命令如下:

$ sudo docker container stop v2ray
$ sudo docker container rm v2ray
$ sudo docker run -d --name v2ray -e TZ=Asia/Shanghai -v /etc/v2ray:/etc/v2ray -p 8888:8888 --restart always v2fly/v2fly-core run -c /etc/v2ray/config.json

假如你的配置换了端口号,那么相应的端口映射也要更改,假如你在配置文件中把监听端口改为了 9999,则 -p 参数应该这样写:

-p 9999:9999

假如你想将容器中的端口映射到本机的端口,则命令应该这样写

-p 127.0.0.1:端口号:端口号

如果 V2Ray 用的传输层协议是 mKCP,由于 mKCP 基于 UDP,那么需要指定映射的端口是 UDP:

-p 9999:9999/udp

除非你打算使用 Nginx 来转发 Websocket 否则不需要映射到本地,直接填写端口号:端口号的形式即可

另外,如果开启了动态端口,-p 标记可以多次使用来绑定多个端口。具体用法是在指令中再加上多个 -p 标记即可。

# 更新策略

# 手动更新

更新 V2Ray 的 Docker 镜像:

$ docker pull v2fly/v2fly-core

更新完之后,你需要重新部署容器,方法见上。

# 自动更新

如果你想让自己的 V2Ray 容器自动更新,无需手动部署。可以尝试 watchtower (opens new window).

注意:以下命令会让你的所有容器自动更新。如果想只更新 V2Ray,请参考 containrrr.dev (opens new window)

docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower