# 使用官方镜像
docker run -d \
--name gerrit \
-p 8080:8080 \
-p 29418:29418 \
-e CANONICAL_WEB_URL=http://localhost:8080 \
-e AUTH_TYPE=DEVELOPMENT_BECOME_ANY_ACCOUNT \
-v gerrit_data:/var/gerrit/review_site \
gerritcodereview/gerrit:latest
# 或使用更完整的配置
docker run -d \
--name gerrit \
-p 8080:8080 \
-p 29418:29418 \
-e CANONICAL_WEB_URL=http://your-domain.com \
-e GERRIT_INIT_ARGS='--install-plugin=download-commands' \
-v gerrit_data:/var/gerrit/review_site \
-v /path/to/certs:/var/gerrit/etc/ssl \
gerritcodereview/gerrit:latest
version: '3'
services:
gerrit:
image: gerritcodereview/gerrit:latest
container_name: gerrit
restart: unless-stopped
ports:
- "8080:8080"
- "29418:29418"
environment:
- CANONICAL_WEB_URL=http://localhost:8080
- GERRIT_INIT_ARGS=--install-plugin=download-commands
- AUTH_TYPE=LDAP # 或 OAUTH, DEVELOPMENT_BECOME_ANY_ACCOUNT等
volumes:
- gerrit_data:/var/gerrit/review_site
- ./gerrit.config:/var/gerrit/etc/gerrit.config:ro
networks:
- gerrit-network
volumes:
gerrit_data:
networks:
gerrit-network:
driver: bridge
问题:使用DEVELOPMENT_BECOME_ANY_ACCOUNT模式时,无法通过HTTP登录。
解决方案:
# 方法1:初始化时设置HTTP认证
docker run -d \
--name gerrit \
-p 8080:8080 \
-p 29418:29418 \
-e GERRIT_INIT_ARGS='--batch --no-auto-start' \
-v gerrit_data:/var/gerrit/review_site \
gerritcodereview/gerrit:latest
# 进入容器修改配置
docker exec -it gerrit bash
# 编辑gerrit.config,在[auth]部分添加
[auth]
type = DEVELOPMENT_BECOME_ANY_ACCOUNT
# 重启容器
docker restart gerrit
# 方法2:使用预配置的配置
docker run -d \
--name gerrit \
-p 8080:8080 \
-p 29418:29418 \
-e GERRIT_GIT_LOCALPATH=/var/gerrit/git \
-e GERRIT_INIT_ARGS='--batch --install-plugin=download-commands' \
-v gerrit_data:/var/gerrit/review_site \
gerritcodereview/gerrit /bin/sh -c "java -jar /var/gerrit/bin/gerrit.war init --batch --dev -d /var/gerrit/review_site && /var/gerrit/bin/gerrit.sh run"
问题:LDAP认证失败。
解决方案:
# 准备LDAP配置
cat > gerrit.config << 'EOF'
[gerrit]
basePath = git
canonicalWebUrl = http://localhost:8080/
[auth]
type = LDAP
logoutUrl = http://localhost:8080/
[ldap]
server = ldap://ldap.example.com
username = cn=admin,dc=example,dc=com
password = your_password
accountBase = ou=people,dc=example,dc=com
groupBase = ou=groups,dc=example,dc=com
[container]
user = root
javaHome = /usr/lib/jvm/java-11-openjdk
javaOptions = "-Dflogger.backend_factory=com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance"
EOF
# 运行容器
docker run -d \
--name gerrit \
-p 8080:8080 \
-p 29418:29418 \
-v gerrit_data:/var/gerrit/review_site \
-v $(pwd)/gerrit.config:/var/gerrit/etc/gerrit.config:ro \
gerritcodereview/gerrit:latest
问题:无法通过SSH连接Gerrit。
解决方案:
# 检查SSH配置
docker exec -it gerrit cat /var/gerrit/etc/gerrit.config | grep sshd
# 如果SSH端口不是29418,可以重新映射
docker run -d \
--name gerrit \
-p 2222:29418 \ # 将容器内的29418映射到主机的2222
-p 8080:8080 \
-e CANONICAL_WEB_URL=http://localhost:8080 \
-v gerrit_data:/var/gerrit/review_site \
gerritcodereview/gerrit:latest
# 生成SSH密钥(如果需要)
ssh-keygen -t rsa -f ~/.ssh/gerrit_key
docker exec -it gerrit cat /var/gerrit/etc/ssh_host_rsa_key.pub
问题:使用外部数据库时连接失败。
解决方案:
# docker-compose.yml
version: '3'
services:
db:
image: postgres:13
environment:
POSTGRES_USER: gerrit
POSTGRES_PASSWORD: gerrit_password
POSTGRES_DB: gerrit
volumes:
- postgres_data:/var/lib/postgresql/data
gerrit:
image: gerritcodereview/gerrit:latest
depends_on:
- db
environment:
- DATABASE_TYPE=postgresql
- DATABASE_HOSTNAME=db
- DATABASE_PORT=5432
- DATABASE_DATABASE=gerrit
- DATABASE_USERNAME=gerrit
- DATABASE_PASSWORD=gerrit_password
volumes:
- gerrit_data:/var/gerrit/review_site
ports:
- "8080:8080"
- "29418:29418"
volumes:
postgres_data:
gerrit_data:
问题:插件安装失败或不可用。
解决方案:
# 方法1:初始化时安装插件
docker run -d \
--name gerrit \
-p 8080:8080 \
-p 29418:29418 \
-e GERRIT_INIT_ARGS='--install-plugin=download-commands --install-plugin=replication' \
-v gerrit_data:/var/gerrit/review_site \
gerritcodereview/gerrit:latest
# 方法2:手动安装插件
# 下载插件到主机
wget https://gerrit-ci.gerritforge.com/job/plugin-download-commands-bazel-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/download-commands/download-commands.jar
# 复制到容器
docker cp download-commands.jar gerrit:/var/gerrit/plugins/
# 重启容器
docker restart gerrit
问题:Gerrit运行缓慢或内存不足。
解决方案:
# 增加JVM内存参数
docker run -d \
--name gerrit \
-p 8080:8080 \
-p 29418:29418 \
-e JAVA_OPTIONS="-Xmx4g -Xms2g -XX:MaxMetaspaceSize=512m" \
-v gerrit_data:/var/gerrit/review_site \
gerritcodereview/gerrit:latest
# 或者通过环境变量设置
docker run -d \
--name gerrit \
-p 8080:8080 \
-p 29418:29418 \
-e GERRIT_HEAP_LIMIT=4g \
-e GERRIT_HEAP_INIT=2g \
-v gerrit_data:/var/gerrit/review_site \
gerritcodereview/gerrit:latest
# 查看实时日志
docker logs -f gerrit
# 查看特定时间段的日志
docker logs --since 1h gerrit
# 进入容器查看详细日志
docker exec -it gerrit bash
cd /var/gerrit/logs
tail -f error_log
# 检查Gerrit状态
docker exec -it gerrit /var/gerrit/bin/gerrit.sh status
# 备份Gerrit数据
docker exec gerrit tar czf /tmp/gerrit-backup.tar.gz /var/gerrit/review_site
docker cp gerrit:/tmp/gerrit-backup.tar.gz .
# 恢复数据
docker cp gerrit-backup.tar.gz new_gerrit:/tmp/
docker exec new_gerrit tar xzf /tmp/gerrit-backup.tar.gz -C /
# 准备SSL证书
mkdir -p certs
# 将server.crt和server.key放入certs目录
docker run -d \
--name gerrit \
-p 443:8080 \
-p 29418:29418 \
-e CANONICAL_WEB_URL=https://your-domain.com \
-e HTTP_LISTEN_URL=proxy-https://*:8080/ \
-e SSL_CERT=/var/gerrit/etc/ssl/server.crt \
-e SSL_KEY=/var/gerrit/etc/ssl/server.key \
-v gerrit_data:/var/gerrit/review_site \
-v $(pwd)/certs:/var/gerrit/etc/ssl:ro \
gerritcodereview/gerrit:latest
#!/bin/bash
# quick-start-gerrit.sh
set -e
# 创建数据目录
mkdir -p gerrit_data
# 生成配置文件
cat > gerrit.config << 'EOF'
[gerrit]
basePath = git
canonicalWebUrl = http://localhost:8080/
[auth]
type = DEVELOPMENT_BECOME_ANY_ACCOUNT
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = http://*:8080/
[container]
user = root
javaHome = /usr/lib/jvm/java-11-openjdk
EOF
# 启动Gerrit
docker run -d \
--name gerrit \
--restart unless-stopped \
-p 8080:8080 \
-p 29418:29418 \
-v $(pwd)/gerrit_data:/var/gerrit/review_site \
-v $(pwd)/gerrit.config:/var/gerrit/etc/gerrit.config:ro \
gerritcodereview/gerrit:latest
echo "Gerrit启动成功!"
echo "访问地址: http://localhost:8080"
echo "SSH地址: ssh://localhost:29418"
使用这些配置和解决方案,你应该能够顺利运行和管理Gerrit容器。如果在具体实施中遇到其他问题,可以查看容器日志获取更详细的错误信息。