Dockerfile文件:
FROM alpine:3.17
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk update \
&& apk add --no-cache zerotier-one
EXPOSE 9992/udp
COPY main.sh /main.sh
zerotier.sh
RUN chmod +x /main.sh
ENV ZT_NETWORK_ID="1"
CMD ["/main.sh"]
main.sh文件
#!/bin/sh
# 函数:重启 ZeroTier 服务
restart_zerotier() {
# 强制停止 ZeroTier 进程
kill -9 `pidof zerotier-one` || true
# 等待一段时间以确保进程完全停止
sleep 5
# 启动 ZeroTier 服务
zerotier-one -p$ip&
}
# 检查 ZeroTier 是否在运行
if ! pidof zerotier-one >/dev/null; then
# 如果 ZeroTier 不在运行,启动它
zerotier-one -p$ip&
fi
# 等待一段时间让 ZeroTier 服务启动
sleep 5
# 执行 ZeroTier 相关的其他初始化操作
# 例如,加入 ZeroTier 网络
zerotier-cli join $ZT_NETWORK_ID
# 接下来可以是您的其他命令...
# 循环检查 ZeroTier 进程是否仍在运行,如果不在则重启
while true; do
if ! pidof zerotier-one >/dev/null; then
echo "ZeroTier service is not running, restarting..."
restart_zerotier
fi
sleep 10 # 每10秒检查一次
done
zerotier.sh
docker run -d \
--name=test-ze \
--restart=always \
--device=/dev/net/tun \
--net=host \
-e ip=9992 \
-e ZT_NETWORK_ID=xxxxxxxx \
--cap-add=NET_ADMIN \
--cap-add=SYS_ADMIN \
-v $PWD/zerotier-one:/var/lib/zerotier-one \
q7060123/zerotier:v1
sleep 5
docker exec -it test-ze sh -c 'zerotier-cli info && zerotier-cli status'
Content type
Image
Digest
sha256:a23b261bc…
Size
9.5 MB
Last updated
over 2 years ago
docker pull q7060123/zerotier:v1