Docker 在主机浏览器中打开一个 url

nod*_*man 6 docker

我已经使用 apt-get install xdg-utils 在我的 docker 容器中安装了 xdg-utils

我希望该命令xdg-open 'http://www.freedesktop.org/'在主机浏览器中打开指定的 url。

现在它抛出这个错误:

root@pravin:/# xdg-open 'http://www.freedesktop.org/'
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: www-browser: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: links2: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: elinks: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: links: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: lynx: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: w3m: not found
xdg-open: no method available for opening 'http://www.freedesktop.org/'
Run Code Online (Sandbox Code Playgroud)

如何让docker使用主机操作系统的浏览器?

Nam*_*PNQ 5

我相信您正在寻找的答案是xdg-open-server


rgo*_*gov 5

这可以通过让容器与容器外部可xdg-open在主机上执行的进程进行通信来实现。

在主机上,让我们创建一个命名管道hostbrowserpipe并不断轮询它以查找我们应该打开的新 URL:

mkfifo hostbrowserpipe
while read -r URL < hostbrowserpipe; do xdg-open "$URL"; done
Run Code Online (Sandbox Code Playgroud)

然后让我们运行一个通过绑定挂载写入该管道的容器:

docker run --rm -v "$(pwd)"/hostbrowserpipe:/var/run/hostbrowserpipe alpine \
    sh -c "echo https://stackoverflow.com/a/73750272 >> /var/run/hostbrowserpipe"
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 在主机端,DISPLAY必须进行设置才能xdg-open工作。例如export DISPLAY=:0使用主显示器。

  • 这不适用于 macOS 上的 Docker Desktop 和open命令。


Jan*_*raj 4

你不能,因为默认情况下容器不与操作系统进程/网络命名空间/文件系统共享。

理论上,您可以在主机进程命名空间(--pid=host)、网络主机命名空间(--network=host)中启动容器并将所需的 FS 挂载到容器(--volume ..),但您仍然可能遇到其他问题。这需要非常先进的 Docker 容器技能。