Xwiki-Docker搭建及问题解决

Xwiki-Docker搭建及问题解决

首先是明确你要搭建的版本,因为不同的版本对应的docker版本不同,而且官方的镜像也不一定完全契合,我先展示下现版本:

XWiki 14 ~ 14.10.21
Xwiki 15 ~ 15.10.9
Xwiki 16 ~ 16.3.1

每个版本都有不同的组件,一般有

1
2
3
4
version-postgres-tomcat
version-mysql-tomcat
version-mariadb-tomcat
lts-postgres-tomcat

区别其实在于其db不同,以及对应的tomcat版本不一样,这里坑比较大,希望各位注意一下

1. 其中14对应支持的mysql的版本虽说已经更新到8.3,但是我在搭建过程中依然存在问题,实测版本可以改为5.7.44或5.7的其他版本
2. 版本15,16版本都支持mysql8.3,但是实测会存在部分问题,Its版本一般是最新版本的更新,追求安全的可以无脑拉取

1. Xwiki-Docker文件

准备文件:docker-compose.yml; init.sql;.env
不同版本的docker-compose.yml文件几乎一致,不同的是.env文件
.env文件中包含你需要设置的基本信息

  1. .env文件

    1
    2
    3
    4
    5
    6
    # Default environment values
    XWIKI_VERSION=14.10.18
    DB_USER=xwiki
    DB_PASSWORD=xwiki
    DB_DATABASE=xwiki
    MYSQL_ROOT_PASSWORD=xwiki

    这个文件中包含你想安装的版本信息和数据库连接密码,重点注意版本号,版本号建议去hub.docker.com搜索是否存在你写的版本号,这个关系拉取的web镜像版本

  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
    38
    39
    40
    version: '2'
    networks:
    bridge:
    driver: bridge
    services:
    web:
    image: "xwiki:${XWIKI_VERSION}-mysql-tomcat"
    container_name: xwiki-mysql-tomcat-web
    depends_on:
    - db
    ports:
    - "8080:8080"
    environment:
    - DB_USER=xwiki
    - DB_PASSWORD=xwiki
    - DB_HOST=xwiki-mysql-db
    volumes:
    - xwiki-data:/usr/local/xwiki
    networks:
    - bridge
    db:
    image: "mysql:5.7.44"
    container_name: xwiki-mysql-db
    volumes:
    - mysql-data:/var/lib/mysql
    - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    environment:
    - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
    - MYSQL_USER=${DB_USER}
    - MYSQL_PASSWORD=${DB_PASSWORD}
    - MYSQL_DATABASE=${DB_DATABASE}
    command:
    - "--character-set-server=utf8mb4"
    - "--collation-server=utf8mb4_bin"
    - "--explicit-defaults-for-timestamp=1"
    networks:
    - bridge
    volumes:
    mysql-data: {}
    xwiki-data: {}

    这里的配置文件为官方推荐

  3. init.sql

    1
    grant all privileges on *.* to xwiki@'%'

2. 搭建Xwiki-Docker

1
docker-compose up -d

如果没问题你可以使用

1
docker ps -a

查看正在运行的docker container容器状态,如果均为up状态即搭建完成

3. 问题解决

如果出现

  1. 出现web容器错误

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Setting environment variables
    Deploying XWiki in the 'ROOT' context
    Replacing environment variables in files
    Setting permanent directory...
    Configure libreoffice...
    Saving config file hibernate.cfg.xml...
    Saving config file xwiki.cfg...
    Saving config file xwiki.properties...
    Cannot find /usr/local/tomcat/bin/setclasspath.sh
    This file is needed to run this program
    • 在catalina.sh脚本中,导致问题的部分如下:
      1
      2
      3
      4
      5
      if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then
      . "$CATALINA_HOME"/bin/setclasspath.sh
      else
      echo "Cannot find $CATALINA_HOME/bin/setclasspath.sh"
      echo "This file is needed to run this program"
      A1:可以尝试使用docker –privileged启动容器
      A2:更新 runc >= 1.0.0-rc93
      下载地址:https://github.com/opencontainers/runc/releases/
      1
      2
      3
      4
      5
      whereis runc  
      mv /usr/bin/runc /usr/bin/runc.bak #备份原runc文件
      cd /data/make/runc/
      cp runc /usr/bin/runc
      systemctl restart docker
  2. 出现db容器错误
    当出现database数据版本不匹配,redo语句应不为空

    A1:是因为多次尝试其他版本导致overlay层修改,在目录卷中新指定要挂载的目录即可,就是将docker-compose.yml中的mysql-data重新指定一个卷,即可解决

    1
    2
      volumes:
    - mysql-data:/var/lib/mysql