起因
在调试selenium的时候,想有没有独立的环境,可以在任何电脑上使用,然后刚好在docker上发现有一款叫selenium/standalone-chrome
的容器,非常方便,run起来后直接就可以使用,还有VNC可以远程登录查看浏览器执行情况,在linux无界面下真的起到非常大的作用,所以打算pull下来试试
过程
开始只是在本地PC机上调试,使用非常流畅,消耗的资源也很小,所以打算放到服务器上使用,于是在linux上使用和PC上一样的运行脚本,但发现启动时docker日志直接报错了,这让我非常疑惑,因为对docker本身就是学习阶段,并不是很熟悉,所以研究半天,尝试加--dns
的方式进行修复,无果,在github上求助,发现并没有人遇到相关问题,回复也是说检查docker环境,我检查个¥%¥啊
15:46:58.901 INFO [OpenTelemetryTracer.createTracer] - Using OpenTelemetry for tracing
15:46:59.264 WARN [HostIdentifier.resolveHostAddress] - Failed to resolve host address
java.net.UnknownHostException: c1f21803ae98: c1f21803ae98: Temporary failure in name resolution
at java.base/java.net.InetAddress.getLocalHost(InetAddress.java:1670)
at org.openqa.selenium.net.HostIdentifier.resolveHostAddress(HostIdentifier.java:104)
at org.openqa.selenium.net.HostIdentifier.getHostAddress(HostIdentifier.java:123)
at org.openqa.selenium.net.DefaultNetworkInterfaceProvider.<init>(DefaultNetworkInterfaceProvider.java:54)
at org.openqa.selenium.net.NetworkUtils.<init>(NetworkUtils.java:48)
at org.openqa.selenium.grid.server.BaseServerOptions.lambda$getExternalUri$0(BaseServerOptions.java:93)
at java.base/java.util.Optional.orElseGet(Optional.java:369)
at org.openqa.selenium.grid.server.BaseServerOptions.getExternalUri(BaseServerOptions.java:90)
at org.openqa.selenium.grid.commands.Standalone.createHandlers(Standalone.java:129)
at org.openqa.selenium.grid.TemplateGridServerCommand.asServer(TemplateGridServerCommand.java:47)
at org.openqa.selenium.grid.commands.Standalone.execute(Standalone.java:261)
at org.openqa.selenium.grid.TemplateGridCommand.lambda$configure$4(TemplateGridCommand.java:122)
at org.openqa.selenium.grid.Main.launch(Main.java:83)
at org.openqa.selenium.grid.Main.go(Main.java:56)
at org.openqa.selenium.grid.Main.main(Main.java:41)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.openqa.selenium.grid.Bootstrap.runMain(Bootstrap.java:77)
at org.openqa.selenium.grid.Bootstrap.main(Bootstrap.java:70)
Caused by: java.net.UnknownHostException: c1f21803ae98: Temporary failure in name resolution
at java.base/java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method)
at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:930)
at java.base/java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1543)
at java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:848)
at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1533)
at java.base/java.net.InetAddress.getLocalHost(InetAddress.java:1665)
... 20 more
结果
最后的结果真的让人无语,发现是竟然只是/etc/hosts
文件的权限问题,亏我还cat
了半天,发现内容没有问题啊,一直在纠结哪里出问题了,起初也是觉得应该是权限不足的原因,因为在默认seleuesr用户下是无法cat /etc/hosts
的,会提示权限不足,然后sudo su
后就能正常查看了,到这里还没反应过来,一直纠结是为啥,最后在不经意的ls -la
查看了下hosts文件的权限才发现这个问题,真的是吐了八百里血,但是为啥默认权限只有600就不知道为啥了。
-rw------- 1 linuxuesr linuxuesr 77 Jan 6 2023 hosts
# 修改权限即可
chmod 644 /etc/hosts
-rw-r--r-- 1 linuxuesr linuxuesr 77 Jul 12 09:02 hosts