docker - Docker 容器中的 Apache Guacamole : Creation of WebSocket tunnel to guacd failed

标签 docker centos guacamole

我在带有 Docker 19.03 的 CentOS 8.1 上使用 Docker 安装了 Apache Guacamole。

我按照此处描述的步骤操作:

  • https://guacamole.apache.org/doc/gug/guacamole-docker.html
  • https://www.linode.com/docs/applications/remote-desktop/remote-desktop-using-apache-guacamole-on-docker/

  • 我像这样启动容器:

    # mysql container
    docker run --name guacamole-mysql -e MYSQL_RANDOM_ROOT_PASSWORD=yes -e MYSQL_ONETIME_PASSWORD=yes -d mysql/mysql-server
    
    # guacd container
    docker run --name guacamole-guacd -e GUACD_LOG_LEVEL=debug -d guacamole/guacd
    
    # guacamole container
    docker run --name guacamole-guacamole --link guacamole-guacd:guacd --link guacamole-mysql:mysql -e MYSQL_DATABASE=guacamole -e MYSQL_USER=guacamole -e MYSQL_PASSWORD=password -d -p 8080:8080 guacamole/guacamole
    

    一切顺利,我能够在端口 8080 上访问 Guacamole Web 界面。我在端口 5900 上配置了一个与另一台机器的 VNC 连接。不幸的是,当我尝试使用该连接时,我在 Web 界面中收到以下错误:

    “Guacamole 服务器发生内部错误,连接已终止……”

    我也查看了日志,在 Guacamole 日志中我发现了这个:

    docker logs --tail all -f guacamole-guacamole
    ...
    15:54:06.262 [http-nio-8080-exec-2] ERROR o.a.g.w.GuacamoleWebSocketTunnelEndpoint - Creation of WebSocket tunnel to guacd failed: End of stream while waiting for "args".
    15:54:06.685 [http-nio-8080-exec-8] ERROR o.a.g.s.GuacamoleHTTPTunnelServlet - HTTP tunnel request failed: End of stream while waiting for "args".
    

    我确定目标机器(运行 VNC 服务器)没问题。我可以从 VNC 客户端和我之前安装的另一个较旧的 Guacamole (不使用 Docker)连接到它。

    我的容器看起来也不错:

    docker container ps
    
    CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                 PORTS                    NAMES
    ad62aaca5627        guacamole/guacamole   "/opt/guacamole/bin/…"   About an hour ago   Up About an hour       0.0.0.0:8080->8080/tcp   guacamole-guacamole
    a46bd76234ea        guacamole/guacd       "/bin/sh -c '/usr/lo…"   About an hour ago   Up About an hour       4822/tcp                 guacamole-guacd
    ed3a590b19d3        mysql/mysql-server    "/entrypoint.sh mysq…"   2 hours ago         Up 2 hours (healthy)   3306/tcp, 33060/tcp      guacamole-mysql
    

    我连接到 guacamole-guacamole 容器并 ping 了另外两个容器:guacamole-mysql 和 guacamole-guacd。两者看起来都很好并且可以到达。

    docker exec -it guacamole-guacamole bash
    
    root@ad62aaca5627:/opt/guacamole# ping guacd
    PING guacd (172.17.0.2) 56(84) bytes of data.
    64 bytes from guacd (172.17.0.2): icmp_seq=1 ttl=64 time=0.191 ms
    64 bytes from guacd (172.17.0.2): icmp_seq=2 ttl=64 time=0.091 ms
    
    root@ad62aaca5627:/opt/guacamole# ping mysql
    PING mysql (172.17.0.3) 56(84) bytes of data.
    64 bytes from mysql (172.17.0.3): icmp_seq=1 ttl=64 time=0.143 ms
    64 bytes from mysql (172.17.0.3): icmp_seq=2 ttl=64 time=0.102 ms
    

    看起来 Guacamole 本身和 guacd 之间存在通信问题。这就是我完全陷入困境的地方。

    编辑

    我在 CentOS 7 上尝试过,我遇到了同样的问题。

    我也试过这个解决方案https://github.com/boschkundendienst/guacamole-docker-compose正如@BatchenRegev 所建议的,但我又遇到了同样的问题。

    最佳答案

    我在centos下也遇到过同样的问题。

    我唯一的区别是我将数据库托管在单独的机器上,因为这都是云托管的,我希望能够随意销毁/重建 Guacamole 服务器。

    我结束了创建 docker-compose.yml 文件,因为它似乎效果更好。

    我遇到的其他问题:

  • 确保 guacd_hostname 是实际的机器主机名,而不是 127.0.0.1
  • 将 Selinux 设置为允许 httpd。

    sudo setsebool -P httpd_can_network_connect

  • 我的 docker-compose.yml 如下所示,用您自己的替换所有 {variables} 并更新文件,如果您也使用 sql 镜像。

    version: "2"
    services:
      guacd:
        image: "guacamole/guacd"
        container_name: guacd
        hostname: guacd
        restart: always
        volumes:
          - "/data/shared/guacamole/guacd/data:/data"
          - "/data/shared/guacamole/guacd/conf:/conf:ro"
        expose:
          - "4822"
        ports:
          - "4822:4822"
        network_mode: bridge
    
      guacamole:
        image: "guacamole/guacamole"
        container_name: guacamole
        hostname: guacamole
        restart: always
        volumes:
          - "/data/shared/guacamole/guacamole/guac-home:/data"
          - "/data/shared/guacamole/guacamole/conf:/conf:ro"
        expose:
          - "8080"
        ports:
          - "8088:8080"
        network_mode: bridge
        environment:
          - "GUACD_HOSTNAME={my_server_hostname}"
          - "GUACD_PORT=4822"
          - "MYSQL_PORT=3306"
          - "MYSQL_DATABASE=guacamole"
          - "GUACAMOLE_HOME=/data"
          - "MYSQL_USER=${my_db_user}"
          - "MYSQL_PASSWORD=${my_db_password}"
          - "MYSQL_HOSTNAME=${my_db_hostname}"

    关于docker - Docker 容器中的 Apache Guacamole : Creation of WebSocket tunnel to guacd failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60324139/

    相关文章:

    mysql - 如何在带有docker-compose服务器的Docker中运行MySQL命令终端

    docker - 通过示例一起使用 Vagrant 和 Docker

    mysql - 关闭mysql端口: 3306 and make it local

    tomcat - Guacamole 新安装

    mysql - guacamole LDAP 用户但没有 mysql 连接参数

    Docker 安装/tmp/pulseaudio 给出错误

    python - 链接 python app docker 和 postgres docker

    php - 使用 VestaCP 在 Centos 7 上将 Payeezy FirstData 自签名证书添加到服务器 Trusted Store CA

    php - 谷歌云 - 重启后服务器超时

    java - user-mapping.xml 文件在 Guacamole 中不起作用,登录无效