docker appium无法通过tcpip连接远程模拟器——一个排查了三天的问题

出现了什么问题

最近要整理下pytest-xdist方面的资料,但是尝试通过虚拟机远程连接模拟器的时候,都是报如下的超时:

解决思路

思路一:换模拟器,失败

因为我用的逍遥模拟器,尝试换成夜神模拟器,连接超时

思路二:把桥接ip换成和虚拟机一样的ip地址,失败

这种直接会报一个连接拒绝

思路三:把桥接静态ip换成DHCP,失败

DHCP是动态分配的ip,所以和静态ip的效果差不多,连接超时

思路四:重启路由器,失败

连接超时

思路五:删除旧容器,创建新容器

就在这一步执行的过程中,偶然发现了异常之处,这里贴下源码看下

[root@localhost ~]# docker run --privileged -d -p 4725:4723 --name appium appium/appium
**WARNING: IPv4 forwarding is disabled. Networking will not work.**
6a5cfdea75630c0fe4494de6ea28e4e9c31b1a93f3b11adf627e92486fcaa980
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
6a5cfdea7563        appium/appium       "/bin/sh -c '/root/w…"   28 seconds ago      Up 3 seconds        4567/tcp, 0.0.0.0:4725->4723/tcp   appium
[root@localhost ~]# docker exec -it appium adb connect 192.168.0.106:7777
* daemon not running; starting now at tcp:5037
* daemon started successfully
failed to connect to '192.168.0.106:7777': Connection timed out
[root@localhost ~]# vim /usr/lib/sysctl.d/00-system.conf 
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
6a5cfdea7563        appium/appium       "/bin/sh -c '/root/w…"   6 minutes ago       Up 5 minutes        4567/tcp, 0.0.0.0:4725->4723/tcp   appium
[root@localhost ~]# systemctl restart network
[root@localhost ~]# docker rm -f appium
appium
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
bc5f8a08abd1        centos:7.6.1810     "/bin/bash"         2 months ago        Exited (137) 2 months ago                       elastic_cori
[root@localhost ~]# docker run --privileged -d -p 4725:4723 --name appium appium/appium
9e4cb3a76ab1f8d79c07472e6eb673d3886606c1ce1d4cdcc88fe57f42f3a34f
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
9e4cb3a76ab1        appium/appium       "/bin/sh -c '/root/w…"   5 seconds ago       Up 4 seconds        4567/tcp, 0.0.0.0:4725->4723/tcp   appium
[root@localhost ~]# docker exec -it appium adb connect 192.168.0.106:7777
* daemon not running; starting now at tcp:5037
* daemon started successfully
connected to 192.168.0.106:7777
[root@localhost ~]# 

这里的错误是WARNING: IPv4 forwarding is disabled. Networking will not work,这是IPV4转发功能已经禁用,会导致主机中的容器无法与其他主机进行通信

解决办法

[root@localhost ~]# vi /usr/lib/sysctl.d/00-system.conf
# 写入如下配置,保存退出
net.ipv4.ip_forward=1
#重启网络服务
[root@localhost ~]# systemctl restart network

从上面贴的代码可以看到,连接成功了

注意

  1. 夜神模拟器重启后设置的静态ip和实际获得的ip不一样

  2. 逍遥模拟器设置的静态ip和实际获得的ip一样,但首先要切换MAC地址,再重启


  3. 设置桥接不能和虚拟机的ip相同,否则会出现两个问题:一个是把xshell连接断开,一个是docker appium adb连接模拟器时被拒绝

参考文章

《docker : 报错 WARNING: IPv4 forwarding is disabled. Networking will not work.》

posted @ 2020-07-15 23:33  cnhkzyy  阅读(561)  评论(0编辑  收藏  举报