如果你苦于没有公网IP,又想在非局域网下访问服务器上的docker容器,这个时候可以考虑使用开源的frp配置反向代理。前提: 需要一台拥有公网IP的服务器。
下载frp并解压
wget https://github.com/fatedier/frp/releases/download/v0.58.0/frp_0.58.0_linux_amd64.tar.gz
tar -zxvf 文件名.tar.gz
在拥有公网ip的服务器端配置frp的server部分(以下简称服务端)
cd到解压的目录下然后vim frps.toml
,并填入如下内容(一般已经配置好了为 bindPort = 7000)
bindPort = 7000
在客户端(家里服务器)配置frp的client部分(以下简称客户端)
同样到解压的目录下vim frpc.toml
, 配置如下:
serverAddr = "127.0.0.1" #公网服务器ip
serverPort = 7000 # 同服务端配置的端口
[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
# 客户端需要访问的docker容器端口,若为22,则可直接ssh到客户端
localPort = 9000
remotePort = 9000 # 服务端端口(需开放此端口)
运行
在服务端上运行
./frps -c ./frps.toml
在客户端上运行
./frpc -c ./frpc.toml
至此就可以通过服务端公网ip:port来访问客户端容器,此处为ip:9000
设置开机自启动,可参考frp文档
- 安装systemd
# 使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd
# 使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemd
- 创建frps.service文件
sudo vim /etc/systemd/system/frps.service
写入如下内容
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml
[Install]
WantedBy = multi-user.target
设置开机自动sudo systemctl enable frps
后期管理:
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps