我在带有 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 界面中收到以下错误:
“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 文件,因为它似乎效果更好。
我遇到的其他问题:
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/