【问题标题】:Cannot bind X UNIX socket within Docker container无法在 Docker 容器中绑定 X UNIX 套接字
【发布时间】:2022-12-12 14:19:34
【问题描述】:

我正在尝试在 Docker 容器中运行 Xvfb,但失败并出现以下错误:

$ Xvfb :0 -nolisten tcp -screen 0 1024x768x24
_XSERVTransSocketUNIXCreateListener: ...SocketCreateListener() failed
_XSERVTransMakeAllCOTSServerListeners: server already running
(EE) 
Fatal server error:
(EE) Cannot establish any listening sockets - Make sure an X server isn't already running(EE) 

根据 strace,它试图在 /tmp/.X11-unix/X0 绑定一个 UNIX 套接字:

bind(4, {sa_family=AF_UNIX, sun_path=@"/tmp/.X11-unix/X0"}, 20) = -1 EADDRINUSE (Address already in use)

但是,容器中不存在该文件(由ls -l /tmp/.X11-unix 验证)。

如果我使用不同的屏幕编号,例如:1,程序就会成功。

此容器以--network host模式运行,/tmp/.X11-unix/X0存在于主机上。这是否会产生某种问题,即容器和主机不能在同一路径上拥有 UNIX 套接字,即使该套接字在容器中不可见?

【问题讨论】:

    标签: docker unix-socket xvfb xserver


    【解决方案1】:

    这是一个令人兴奋的错误!您在 UNIX domain socket abstract namespace 中遇到命名冲突。 Linux 中的 UNIX domain sockets 可以在两种地方创建:一是在普通的 VFS 中,可以用ls 查看;另一个是“抽象命名空间”,其中套接字名称以'开头

    猜你喜欢
    • 2022-07-24
    • 2019-01-13
    • 2015-07-18
    • 2018-07-21
    • 2010-11-25
    • 1970-01-01
    • 2021-10-17
    • 2017-11-29
    • 2019-04-14
    相关资源
    最近更新 更多