背景
STF是一个web端移动设备管理平台,可以从浏览器端远程调试、远程管理设备(目前仅支持android),再通过端口开放从而实现web端远程调试真机的目的,同时还可以配置wifi连接实现无线调试的功能
安装
安装Docker
1
2
3
4
5
6
7
8
9
10
11
12
13
14先卸载已安装的Docker包
sudo apt-get remove docker docker-engine docker-ce docker.io
更新软件包
sudo apt-get update
安装Https实用存储库
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
添加Docker官方的GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
设置stable存储库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
再次更新以下apt包
sudo apt-get update
安装Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io拉取STF相关镜像
1
2
3
4
5
6
7
8
9
10STF镜像
sudo docker pull openstf/stf:latest
adb 镜像
sudo docker pull sorccu/adb:latest
rethinkdb 镜像
sudo docker pull rethinkdb:latest
ambassador 镜像
sudo docker pull openstf/ambassador:latest
nginx 镜像
sudo docker pull nginx:latest查看已安装的镜像
1
sudo docker images
启动镜像
1
2
3
4
5
6启动rethinkdb数据库
sudo docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090
启动adb
sudo docker run -d --name adbd --privileged -v /dev/bus/usb:/dev/bus/usb --net host sorccu/adb:latest
启动stf:启动时配置的IP地址通过ifconfig命令查询到的结果, 其中--allow-remote是设置允许adb远程连接android真机
sudo docker run -d --name stf --net host openstf/stf stf local --public-ip 192.168.85.129 --allow-remote查看运行中的容器
1
sudo docker ps -a
然后在浏览器中访问STF所在服务器的即可访问相应的数据:http://192.168.140.129:7100
知识点
Docker服务状态
1
2
3
4
5
6
7
8
9
10查看docker服务启动状态
systemctl status docker
启动docker服务
sudo systemctl start docker
重启docker
sudo service docker restart
停止docker
sudo service docker stop
启动docker
sudo service docker start容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14查看所有正在运行容器
docker ps
containerId 是容器的ID
docker stop containerId
查看所有容器
docker ps -a
查看所有容器ID
docker ps -a -q
start启动所有停止的容器
docker start $(docker ps -a -q)
stop停止所有容器
docker stop $(docker ps -a -q)
remove删除所有容器
docker rm $(docker ps -a -q)删除镜像
1
2
3
4删除所有的镜像
docker rmi $(docker images -q)
根据格式删除所有镜像
docker rmi $(docker ps -qf status=exited)查看日志
1
2
3
4
5
6
7
8日志命令格式
docker logs [options] [容器的号]
--details:显示更多的信息
-f, --follow:跟踪实时日志
--since=[日期格式]:显示自某个时间(timestamps)之后的日志,或者相对时间,如42m,或2020-02-09T13:23:25
--tail=数字:从日志末尾显示多少行日志,默认为all
-t,--timestamps:显示时间戳
--until=[时间格式]:显示子某个timestamp之前的日志,或相对时间,如42m(42分钟)Docker启动提示Get Permission Denied
解决办法1:
1
使用sudo获取管理员权限,运行docker命令
解决办法2:docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令
1
2
3
4
5
6
7
8添加docker用户组
sudo groupadd docker
将登陆用户加入到docker用户组中
sudo gpasswd -a $USER docker
更新用户组
newgrp docker
测试docker命令是否可以使用sudo正常使用
docker ps配置手机允许远程adb
**(背景,了解)**在adbd启动时首先检查是否设置了service.adb.tcp.port,如果设置了,就是使用TCP作为连接方式;如果没设置,就去检查是否有adb的USB设备(dev/android_adb),如果有就用USB作为连接方式;如果没有USB设备,则还是用TCP作为连接方式。因此只需要在启动adbd之前设置service.adb.tcp.port,就可以让adbd选择TCP模式,也就可以通过网络来连接adb了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/* for the device, start the usb transport if the
** android usb device exists and "service.adb.tcp"
** is not set, otherwise start the network transport.
*/
property_get("service.adb.tcp.port", value, "0");
if (sscanf(value, "%d", &port) == 1 && port > 0) {
// listen on TCP port specified by service.adb.tcp.port property
local_init(port);
} else if (access("/dev/android_adb", F_OK) == 0) {
// listen on USB
usb_init();
} else {
// listen on default port
local_init(ADB_LOCAL_TRANSPORT_PORT);
}有两种修改方式:
- 需要修改init.rc文件。
- 通过命令设置,以下步骤是通过命令修改的,但每次重启手机后就需要重新设置。
本地配置android sdk环境,手机(android版本别太低)开启了usb调试开关,且确保手机与电脑位于同一wifi下(其实有公网IP理论上应该都可以,我还没有尝试),然后执行如下命令
1
2
3
4
5
65555是tcp服务端口号,这个可以随意给(端口必须未被占用)
端口大于1023即可,因为小于1023的是系统内部使用的高级端口,大都服务于系统内部服务
adb tcpip 5555
如果需要切换会usb调试,则执行如下命令
adb usb然后拔掉usb,执行如下命令远程连接手机
1
2
3
4
5ip是自己手机在局域网的IP
adb connect 192.168.8.101:5555
执行成功后,查看连接是否正常
adb devices