2

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

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

我像这样启动容器:

# 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 界面中收到以下错误:

“鳄梨调味酱服务器发生内部错误,连接已终止……”

我也查看了日志,在鳄梨酱日志中我发现了这个:

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 客户端和我之前安装的另一个较旧的鳄梨酱(不使用 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

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

编辑

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

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

4

1 回答 1

1

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

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

我结束了创建 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}"

于 2020-03-01T14:13:16.430 回答