docker pull opengrok/docker:1.14
compose.yaml
services:
opengrok:
image: opengrok/docker:1.14
container_name: opengrok
hostname: opengrok
restart: unless-stopped
ports:
- 9080:8080
environment:
- SYNC_PERIOD_MINUTES=720
volumes:
- $PWD/src:/opengrok/src
- $PWD/data:/opengrok/data
- $PWD/config:/opengrok/etc
- $PWD/logs:/var/log/opengrok
- $PWD/entrypoint.sh:/entrypoint.sh:ro
entrypoint:
- /entrypoint.sh
command:
- /scripts/start.py
user: $UID:$GID
healthcheck:
test:
- CMD-SHELL
- curl -f http://localhost:8080/ || exit 1
interval: 5m
timeout: 10s
retries: 5
start_period: 2m
networks:
default:
name: shared_default
external: true
必须UID=0,不然/scripts/start.py执行会报错,提示没有权限
GID=136,host宿主里面docker group ID
getent group docker | cut -d: -f3
这样即使host普通用户,只要也在docker group里面,也能修改src里面的代码文件和目录。docker opengrok默认没有136 group ID,因此需要添加一下,不然docker exec -it opengrok bash命令会报无法找到136对应的组名。
在/opt/stacks/opengrok/目录下新建如下文件:
entrypoint.sh
#!/bin/sh
if ! getent group 136 > /dev/null 2>&1; then
groupadd -g 136 opengrok
echo "Added group opengrok with GID 136"
fi
exec "$@"
给脚本添加可执行权限
sudo chmod 774 entrypoint.sh
在/opengrok/src目录下git clone源代码时,就不需要使用root用户进行了,这样使用下面的命令进行扫描也是okay的
手动触发indexer扫描代码
docker exec -it opengrok bash -lc "java -jar /opengrok/lib/opengrok.jar -c /usr/local/bin/ctags -s /opengrok/src -d /opengrok/data -H -P -S -G -W /opengrok/etc/configuration.xml -U http://localhost:8080"