Chrome 无法从 docker 容器内的调试端口提供服务

Posted

技术标签:

【中文标题】Chrome 无法从 docker 容器内的调试端口提供服务【英文标题】:Chrome fails to serve from debugging port inside docker container 【发布时间】:2018-06-27 09:42:12 【问题描述】:

我有一个非常简单的 docker 容器,它按照 these instructions 安装“google-chrome-stable”。

在容器内,我无法启动和访问调试服务器:

# start chrome in debug mode
$ google-chrome-stable --no-sandbox --remote-debugging-port=9222

# verify that I can reach the debugging server
$ curl 127.0.0.1:9222
curl: (7) Failed to connect to localhost port 9222: Connection refused

在容器之外(OSX 10.12.6),同样的过程可以正常工作:

# start chrome in debug mode
$ chrome --no-sandbox --remote-debugging-port=9222

# verify that I can reach the debugging server
$ curl localhost:9222
curl localhost:9222
<html>
<head>
<title>Inspectable pages</title>
...

我一定缺少一些东西,因为即使环境不同,这些工作流程似乎也是相同的。

谁能说明这里发生了什么?

:: 更新更多调试信息 ::

运行带有--enable-logging --v=1 标志的命令,我得到了这些日志[没有一个看起来很明显]:

[64:64:0118/111557.689426:VERBOSE1:breakpad_linux.cc(1980)] Breakpad disabled
[72:72:0118/111557.718821:VERBOSE1:zygote_main_linux.cc(594)] ZygoteMain: initializing 2 fork delegates
[72:72:0118/111557.719320:VERBOSE1:nacl_fork_delegate_linux.cc(146)] NaClForkDelegate::Init()
[72:72:0118/111557.724777:VERBOSE1:nacl_fork_delegate_linux.cc(146)] NaClForkDelegate::Init()
[72:72:0118/111557.728735:VERBOSE1:zygote_main_linux.cc(362)] Unable to load plugin internal-not-yet-present internal-not-yet-present: cannot open shared object file: No such file or directory
[72:72:0118/111557.729441:INFO:cpu_info.cc(50)] Available number of cores: 4
[64:64:0118/111557.731729:WARNING:browser_main_loop.cc(297)] Gtk: cannot open display:

运行 netstat 也没有显示:

$ netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

【问题讨论】:

您是否在同一个容器中运行 google-chrome-stable 和 curl 命令?或者你是在你的主机上运行 curl 吗? 哦,我看到了一个错字,你暴露了 9222 端口但卷曲了 7222 端口! @whites11 两个命令在同一个容器中。为错字道歉,这在端口 9222 上。更新问题... 那有点奇怪,是否可以从 google-chrome-stable 命令中看到一些调试数据?另外,netstat -ntpl 返回什么? @whites11 更新了!谢谢。 【参考方案1】:

事实证明,如果没有 --headless 标志,我正在做的事情将无法工作。

# start chrome in debug mode
$ google-chrome-stable --no-sandbox --remote-debugging-port=9222 --headless

# debugging server works as expected
$ curl 127.0.0.1:9222
<html>
<head>
<title>Inspectable pages</title>
...

【讨论】:

以上是关于Chrome 无法从 docker 容器内的调试端口提供服务的主要内容,如果未能解决你的问题,请参考以下文章

远程服务器上 Docker 内的 Xdebug 远程调试

无法连接到 Docker 容器内的 MongoDB

无法连接到 docker 容器内的 SQL Server

Docker容器中的Intellij CE 2018.2 + SBT:远程调试断点无法正常工作

无法在 docker 容器中远程调试 Java 9 Tomcat 9

使用docker-compose时无法访问docker容器内的spring-boot rest-endpoint