docker安装mtproto及报错解决方案
安装docker:curl -sSL https://get.daocloud.io/docker | sh
给权限:usermod -aG docker 【current_user】
启动:systemctl start docker
验证(未报错即成功):docker ps
安装docker-composer:curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
赋执行权限:chmod +x /usr/local/bin/docker-compose
接下来根据官方文档安装:
docker run -d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data telegrammessenger/proxy:latest
docker logs mtproto-proxy
结果报错:
解决方案:
命令换成:docker run --ulimit nofile=90000:90000 -d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data telegrammessenger/proxy:latest
或者:docker run
--privileged=true
-d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data telegrammessenger/proxy:latest
原因分析:
大约在0.6版,privileged被引入docker。
使用该参数,container内的root拥有真正的root权限。
否则,container内的root只是外部的一个普通用户权限。
privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。
甚至允许你在docker容器中启动docker容器。
最终选择的带指定sceret命令:docker run --ulimit nofile=90000:90000 -d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data
-e SECRET=00baadf00d15abad1deaa51sbaadcafe
telegrammessenger/proxy:latest
ps:
secret
: 用户密钥。必须为 32 个字符,仅可包含0
到9
和a
到f
之间的字符,可以用openssl rand -hex 16
命令生成