Docker的安装就不赘叙了,宿主机器是windows/linux/macos都行

Guacamole官方文档

获取镜像

1
2
3
docker pull guacamole/guacamole # 前端客户端页面
docker pull guacamole/guacd # 后端服务端处理各种连接协议
docker pull mysql # 存储用户身份验证信息,还有其他数据和其他非数据库的方案可以选择

启动容器

  1. 生成数据库初始化文件

    1
    docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql
  2. 启动mysql容器并导入初始化数据库文件

    1
    docker run  -d --name mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=guac -v ./initdb.sql:/docker-entrypoint-initdb.d/initdb.sql mysql
  3. 20s后再检查initdb.sql文件是否导入成功

    1
    docker exec -it mysql bash -c "mysqlcheck --check --databases guac -uroot -p123456"

    成功的截图

  4. 启动guacd容器和guacamole容器

    1
    2
    3
    4
    5
    6
    # 启动guacd容器
    docker run --name guacd -d guacamole/guacd

    # 启动guacamole容器
    docker run --name guacamole --link guacd:guacd --link mysql:mysql -e MYSQL_DATABASE=guac -e MYSQL_USER=root -e MYSQL_PASSWORD=123456 -d -p 8080:8080 guacamole/guacamole

浏览器访问http://127.0.0.1:8080/guacamole即可,账号密码默认都为guacadmin

Untitled 1

添加连接信息

Untitled 2

Untitled 3

注意: 如果是连接windows远程桌面使用rdp协议的话,记得指定认证方式为网络级别身份认证(NLA)且勾选忽略证书错误,否者连接不上

Untitled 4

Untitled 5

可以配置下nginx反向代理直接访问ip/域名或者可能需要改guacamole的配置文件来实现,懒得去看java的代码了

下面用Docker compose来实现一遍

  1. 删除之前的容器

    1
    docker rm -f guacamole guacd mysql
  2. 新建docker-compose.yml文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    services:
    mysql:
    image: mysql:latest
    container_name: mysql
    environment:
    MYSQL_ROOT_PASSWORD: 123456
    MYSQL_DATABASE: guac
    volumes:
    - ./initdb.sql:/docker-entrypoint-initdb.d/initdb.sql
    # restart: always

    guacd:
    image: guacamole/guacd:latest
    container_name: guacd
    # restart: always

    guacamole:
    image: guacamole/guacamole:latest
    container_name: guacamole
    environment:
    MYSQL_DATABASE: guac
    MYSQL_USER: root
    MYSQL_PASSWORD: 123456
    GUACD_HOSTNAME: guacd # 不用link,好像是因为compose启动的服务默认都是可以互相访问的,但是需要指定这两个HOSTNAME的环境变量,试了不用compose不指定link使用这两环境变量却没用
    MYSQL_HOSTNAME: mysql
    ports:
    - "8080:8080"
    # restart: always

    # 使用nginx反向代理实现直接访问ip即可访问服务
    nginx:
    image: nginx:latest
    container_name: nginx
    ports:
    - "80:80"
    volumes:
    - ./nginx.conf:/etc/nginx/nginx.conf
  3. 生成数据库初始化文件

    1
    docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql
  4. 新建nginx.conf 文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    events {}

    http {
    server {
    listen 80;

    location / {
    proxy_pass http://guacamole:8080/guacamole/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    }
    }
    }

  5. 使用 Docker Compose 启动容器

    1
    docker-compose up -d
  6. 浏览器访问http://127.0.0.1