Apache Гуакамоле в Docker контейнерах: не удалось создать туннель WebSocket для guacd - PullRequest
0 голосов
/ 20 февраля 2020

Я установил Apache Гуакамоле, используя Docker на CentOS 8.1 с Docker 19.03.

Я выполнил шаги, описанные здесь:

Я запустил контейнеры так:

# 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. Я настроил одно соединение VN C с другим компьютером через порт 5900. К сожалению, когда я пытаюсь использовать это соединение, я получаю следующее ошибка в веб-интерфейсе:

"Произошла внутренняя ошибка на сервере Гуакамоле, и соединение было разорвано ..."

Я также просматривал журналы и Журнал гуакамоле Я нашел это:

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".

Я уверен, что целевой компьютер (на котором работает сервер VN C) в порядке. Я могу подключиться к нему как с клиента VN C, так и с другого старого гуакамоле, который я установил ранее (без использования 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

Я подключился к контейнеру с гуакамоле-гуакамоле и пропинговал два других контейнера: гуакамоле- mysql и гуакамоле-гуакд. Оба выглядят хорошо и достижимы.

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

Похоже, существует проблема связи между самим гуакамоле и гуачем. И это то, где я полностью застрял.

РЕДАКТИРОВАТЬ

Я попробовал на CentOS 7, и я получил те же проблемы.

Я также пытался это решение https://github.com/boschkundendienst/guacamole-docker-compose в соответствии с предложением @BatchenRegev, но у меня снова возникла та же проблема.

1 Ответ

0 голосов
/ 01 марта 2020

У меня были такие же проблемы при использовании centos.

Мое единственное отличие состоит в том, что я размещаю базу данных на отдельном компьютере, так как все это размещено в облаке, и я хочу иметь возможность уничтожить / перестроить сервер гуакамоле по желанию.

Я закончил создание файла docker -compose.yml, так как он, кажется, работал лучше.

Другие ошибки, с которыми я столкнулся:

  • убедитесь, что имя guacd_hostname является фактическим именем хоста компьютера, а не 127.0.0.1
  • , установив Se linux для разрешения httpd.

    sudo setsebool -P httpd_can_network_connect

Мой docker -compose.yml показан ниже, замените все {переменные} на свои собственные и обновите файл, если вы также используете изображение 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}"
...