Docker部署clash及ui管理界面

Docker拉镜像,创建容器

拉取镜像

clash镜像

1
docker pull dreamacro/clash

clash管理面板,yacd镜像

1
docker pull haishanh/yacd

容器命令

删除镜像

1
docker rmi <镜像ID或镜像名>

查看所有镜像

1
docker images

删除单个镜像

1
docker rmi <image_id>

查看所有容器(包括停止的容器)

1
docker ps -a

查看正在运行的容器

1
docker ps

启动容器

1
docker start <容器ID或名称>

停止容器

1
docker stop <容器ID或名称>

重启容器

1
docker restart <容器ID或名称>

删除容器

1
docker rm <容器ID或名称>

网络命令

查看网络

1
docker network ls

创建网络

1
docker network create <网络名>

删除网络

1
docker network rm <网络名>

其他命令

查看 Docker 版本

1
docker --version

查看 Docker 系统信息

1
docker info

查看容器日志

1
docker logs <容器ID或名称>

导出容器(将容器文件系统保存为 tar 文件)

1
docker export <容器ID或名称> > <文件名>.tar

导入容器(从 tar 文件创建新容器)

1
cat <文件名>.tar | docker import - <新镜像名>

准备Clash配置文件

clash配置文件中有clash代理策略,管理设置等配置,为yaml格式,这里举个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
port: 7890
socks-port: 7891
allow-lan: false
mode: Rule
log-level: info
external-controller: 0.0.0.0:9090
hosts:
time.facebook.com: 17.253.84.125
time.android.com: 17.253.84.125
proxies:
- {name: 🇭🇰 香港Z01, server: test.com, port: 19274, type: ss, cipher: aes-256-gcm, password: aa645ec1-7cb9-359a-99a8-b7cef8de4af6, udp: true}
proxy-groups:
- name: 🔰 选择节点
type: select
proxies:
- 🇭🇰 香港Z01
rules:
- IP-CIDR,198.41.128.0/17,🌩️ Cloudflare

  • port、socks-port:设置 HTTP、SOCKS5 代理端口,其他应用程序可配置该代理端口实现科学上网,此处设置的是7890、7891;
  • Allow LAN:启用局域网共享代理功能,开启后局域网的其他机器可使用ip:port代理实现科学上网;
  • mode:代理级别,一般设置Rule或者Global,此处修改为Global
  • external-controller:clash http API的接口地址,如果允许外部调用,需要将IP调整为0.0.0.0,端口默认9090
  • secret:http api密码。如果开启局域网,建议设置,如果本机使用,可删除此项配置。

创建并运行容器

这里把容器目录映射在用户目录下

Clash

1
2
3
4
5
6
7
# 运行 Clash

mkdir ~/clash
cp ./config.yaml ~/clash/ # config.yaml 是 Clash 的配置文件
docker run --name clash \
-p 9090:9090 -p 7890:7890 -p 7891:7891 \
-v ~/clash/config.yaml:/root/.config/clash/config.yaml -d dreamacro/clash

如果修改过 config.yaml 中相关端口的配置,请确保以上端口和 config.yaml 中的端口对应。

-v命令后面跟的是数据存储卷的映射,将主机~/clash/config.yaml映射到容器中的/root/.config/clash/config.yaml

-d命令为后台运行容器

Clash-ui

1
2
3
# 运行 Clash UI

docker run --name clash-ui -p 5080:80 -d haishanh/yacd

此时已经可以通过浏览器访问http://[主机IP]:5080,然后在输入框内输入 http://[主机IP]:9090,再点击 ADD 按钮,然后点击下方新增的 http://[主机IP]:9090 链接进入监控界面。

这里的主机ip一般用真实ip。

[!NOTE]

此时该端口暴露在公网,需要一定安全限制

在docker的配置yaml文件中,可以通过secret来指定密钥。

设置代理

在Clash-ui的web界面中,左侧【代理】选择节点。

测试代理

我们在宿主机中,输入以下命令,测试代理是否成功。

1
2
curl -x http://127.0.0.1:7890 https://ipinfo.io
curl -x socks5://172.17.0.1:7891 https://ipinfo.io

如果执行后,显示非本机IP,说明代理成功。我们可在应用程序中使用7890、7891的代理端口。

临时代理

如果你只想在当前终端会话中使用 HTTP 代理,可以通过设置环境变量来实现。打开终端并输入以下命令

1
2
3
export https_proxy=http://127.0.0.1:7890
export http_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7890
  • https_proxy:用于设置 HTTPS 请求的代理。
  • http_proxy:用于设置 HTTP 请求的代理。

取消代理设置

1
2
unset http_proxy
unset https_proxy

脚本测试

这里使用脚本,开启或关闭http代理

编写脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash

# 检查输入参数
if [ "$#" -ne 1 ]; then
echo "用法: $0 up|down"
exit 1
fi

# 根据输入参数设置或取消代理
if [ "$1" == "up" ]; then
export https_proxy=http://127.0.0.1:7890
export http_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7890
echo "代理已启用"
elif [ "$1" == "down" ]; then
unset http_proxy
unset https_proxy
unset all_proxy
echo "代理已禁用"
else
echo "无效的参数: $1"
echo "用法: $0 up|down"
exit 1
fi

记得加执行权限

1
chmod +x proxy.sh

执行脚本

当您在一个脚本中使用 export 命令设置环境变量时,这些变量只在该脚本的子进程中有效。如果您在终端中直接运行脚本(例如 ./proxy_control.sh up),那么脚本会在一个新的子进程中执行,设置的环境变量不会影响到父进程(即您的终端会话)。

要使环境变量在当前终端会话中生效,您可以使用 source 命令(或 . 命令)来执行脚本。这样,脚本将在当前 shell 环境中运行,而不是在子进程中。

使用 source 命令:

1
source proxy_control.sh up

或者使用 . 命令:

1
. proxy_control.sh up

如果使用./

在新的子进程中执行脚本,脚本中的变量和函数不会影响当前 shell 环境。这意味着脚本中的变量和函数不会影响到当前 shell 环境。

脚本检查

在命令行中,您可以使用 echo 命令查看与代理相关的环境变量:

1
2
3
echo $http_proxy
echo $https_proxy
echo $all_proxy