将caddy安装在docker内,与需要用到caddy服务的其他容器共享网络
安装Docker
https://docs.docker.com/engine/install/
准备工作
# 最高权限
sudo su
# 创建caddy配置文件
DAC=/usr/local/etc/dockerAppsConfig/caddy
mkdir -p $DAC
# 下载Caddyfile配置
wget https://raw.githubusercontent.com/caddyserver/dist/master/config/Caddyfile -nc -O $DAC/Caddyfile
# 若国内服务器无法连接Github,可在URL前追加https://p.ooe.ooo/代理下载
# https://p.ooe.ooo/https://raw.githubusercontent.com/caddyserver/dist/master/config/Caddyfile
运行容器
使用bridge网络(推荐)
docker network create caddy-network
docker run -it -d --restart always --name caddy-service -p 80:80 -p 443:443 --network caddy-network -v ${DAC}:/etc/caddy -v ${DAC}/data:/data caddy
使用host网络
--network host
表示使用宿主机网络,除非特殊需求,否则不推荐
docker run -it -d --restart always --name caddy-service --network host -v ${DAC}:/etc/caddy -v ${DAC}/data:/data caddy
映射端口范围
默认docker会为每个映射端口启动一个进程,如果分配过多端口会造成非常大的内存占用,可在dockered守护进程增加--userland-proxy=false
禁用此功能。即使关闭此项后Docker还是会为每个port在iptables里添加一条规则,如果端口范围很大还是会造成麻烦。端口范围取500个以下比较合适。
dockerd --userland-proxy=false
或者在daemon.json中添加此项
daemon.json文件位置,如果不存在则创建
Linux: /etc/docker/daemon.json
Windows: C:\ProgramData\docker\config\daemon.json
写入以下内容
{
"userland-proxy": false
}
重启dockerd守护进程
service docker restart
之后可正常映射范围端口
docker run -it -d --restart always --name caddy-service -p 80:80 -p 443:443 -p 20000-20100:20000-20100 --network caddy-network -v ${DAC}:/etc/caddy -v ${DAC}/data:/data caddy
重载Caddy配置
caddy_container_id=$(docker ps | grep caddy | awk '{print $1;}')
docker exec -w /etc/caddy $caddy_container_id caddy reload